Android编写C代码调用第三方动态库(例如:libopencv_java3.so)

1.本贴说明

写了这么多年Android,没有认真写过帖子,感觉挺遗憾的,称着新冠病毒猖狂在家无聊,写一篇帖子,打发下时间。本帖使用opencv2.4的头文件以及动态库,并非集成opencv的java api

2.准备

1.AndroidStudio3
2.libopencv_java3.so,以及opencv2.4的头文件,opencv2.4自己去官网下载,可能很慢,一定要下载OpenCV-android-sdk,在sdk包里面才能找到libopencv_java3.so以及头文件

3.创建Demo

注意选择Native C++的项目,如下图
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第1张图片
创建好的项目结构如下图(此时可以运行出hello from c++的界面):
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第2张图片

4.创建jniLibs,并拷贝动态库到jniLibs

Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第3张图片
创建好如下图,当然也可以使用libs,但是需要自己去build.gradle设置sourceSets {}
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第4张图片
拷贝动态库,根据自己cpu架构自己创建对应文件夹

Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第5张图片
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第6张图片
设置过滤,最好是都设置一下,根据自己需求,比如我只需要armeabi-v7a,就设置如下:
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第7张图片

5.拷贝opencv的头文件

在如下位置找到头文件:
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第8张图片
拷贝到项目中的如下位置:
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第9张图片

6.修改CMakeList.txt

Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第10张图片
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第11张图片
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第12张图片
需要修改的地方如下图,但如果是第三方库又依赖其他动态库,其头文件路径与如下的target_include_directories有所不同:
Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第13张图片

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})

target_include_directories(native-lib
        PRIVATE
        ${CMAKE_SOURCE_DIR}/include)

add_library(opencv_java3 SHARED IMPORTED )

set_target_properties(opencv_java3
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}/libopencv_java3.so)

7.在native-lib.cpp中使用opencv

Android编写C代码调用第三方动态库(例如:libopencv_java3.so)_第14张图片

8.结尾

第一次写技术帖子,好多格式都不会,见谅,有错误的地方望大家指出。

你可能感兴趣的:(Android编写C代码调用第三方动态库(例如:libopencv_java3.so))