OpenCV Manager 在不安装的情况下直接使用OpenCV Library

相信初学者(正是在下没错了)在学习OpenCV时,时常会一顿操作猛如虎,一跑起来。。。。。嗯?还要我安装附加的Manager App?也就是这句话—–

Opencv manager package was not found

想了想自己研究的时候装个Manager也到无所谓,可是当需要发布应用时,总不能让人家也去安装吧,于是一顿寻找之下,发现网上大多都是照着Demo直接写

if (!OpenCVLoader.initDebug()) {
    Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, loaderCallback);
} else {
    Log.d(TAG, "OpenCV library found inside package. Using it!");
    loaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}

经实测直接这样写根本不行,于是我去看initDebug中的逻辑,发现需要加载静态so文件才能完成这种情况下的初始化。我顺其自然的就去看官方的demo,发现用的是老的构建方法,也就是通过编辑Android.mk Application.mk 来实现。出于与时俱进的想法,我决定用CMakeList的方式来实现so文件的加载。(至于把OpenCV引入项目的方法以及具体的逻辑实现就不说了,网上有很多,不懂的大家自己做功课吧)

1. 拷贝so文件到libs目录

首先是将sdk/native/libs下对应架构的so文件复制到项目的libs文件夹下(准确的来说是需要移到JniLibs目录下的,不然会遇到读不到的情况,当然也可以通过将libs指定为JniLib的方式的实现,这个问题也是老生常谈了,具体代码就不贴了,网上很多相关代码)。

2. 修改CmakeList文件

接着是修改CmakeList文件,这个文件在初始化NDK项目时会自动生成,我们只需要在原有基础上修改即可,具体使用方法可参考官方文档
我们首先添加

add_library(
        opencv_java3
        SHARED
        IMPORTED
)
set_target_properties(
        opencv_java3
        PROPERTIES IMPORTED_LOCATION
        ${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI}/libopencv_java3.so
)

这里大家应该能猜到大概意思,就是添加一个新的库,并制定目标的所在位置,这里的${ANDROID_ABI}指的是相应的架构,具体支持哪些架构要看复制了哪些架构的so文件,同时记得要在build.gradle里配置abiFilters哦,这里也就不展开了。
PS:我这里使用的是Module目录下的libs文件夹,大家在使用时需根据实际情况进行修改。

接着在target_link_libraries中加入刚刚添加的库,不然编译打包时会打不进去库

target_link_libraries( # Specifies the target library.
        native-lib
        opencv_java3

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
)

3. 检查apk包中是否已经将相关库打包

最后我们编译运行项目(具体使用逻辑可以先不加,主要看是否初始化成功了)在app模块的/build/outputs/apk/debug下双击app-debug.apk文件,如果看到相关库已经打进去了,那么就证明成功了,也就不会出现一开始那个Manager的弹窗了。

本人也是第一次写这样的文章,实属是个萌新,有不正确的地方也请各位大佬指出!!!总之还是希望能给到大家一些帮助,因为这方面的资料和案例很少,所以自己在研究的时候也感觉到有些痛苦,所以这次特地记录下来分享给大家。

    原文作者:Muse_Ykh
    原文地址: https://www.jianshu.com/p/ce5296130a5f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞