安卓运行Opencv动态库配置指南
0、关键点:
错误路线:
不需要单独安装jdk jre 即java环境
不需要单独编译opencv,这里使用官网已经编译好的libopencv_java4.so
正确方法:
如果想单独生成libtest.so,即你自定义的库,可以使用visual studio 2022 c++ 移动开发,新建android 动态共享库,编译生成的库可以有效使用。但是如果想用于编译opencv,此方法不可行。
1、必备软件:
Android Studio 官网下载
https://developer.android.google.cn/studio?hl=zh-cn
Opencv android 库 官网下载
https://opencv.org/releases/
2、Android Studio 新建项目配置
新建一个有按钮的项目,便于测试。
引入cpp模块,该模块被编译后的库名字为libdemo.so
demo为项目名字。
在FirstFragment页面中有一个按钮,点击按钮将会执行我们的c++ 函数testHello
请在该类中加入红框中的代码。
请在demo.cpp 中加入以下所有代码,一个一个敲,不要漏。
配置CMakeLists.txt
先把头文件放置于正确位置
请在app/src/main文件夹内创建jniLibs文件夹,并在其内新建arm64-v8a
1、include 放入 cpp 文件夹内
2、libopencv_java4.so 放入jniLibs/arm64-v8a/中
配置CMakeLists.txt
#这里是导入的外部库的内容
include_directories(./include) 含义为头文件目录为CMakeLists.txt所在目录下的include中
add_library(opencv_java4 SHARED IMPORTED) 含义为明确导入libopencv_java4.so 的共享库
set_target_properties(opencv_java4
PROPERTIES IMPORTED_LOCATION
F:/01-Projects/01-Android/demo/app/src/main/jniLibs/arm64-v8a/libopencv_java4.so
)含义为指定导入的库的路径,请用绝对路径,一定是正斜杠,不要加引号
add_library(${CMAKE_PROJECT_NAME} SHARED
demo.cpp)含义为生成共享库,源代码为demo.cpp,后面可以加入你想要的其它源文件
target_link_libraries(${CMAKE_PROJECT_NAME}
android
opencv_java4
log)含义为将android库加入目标库,加入opencv_java4,加入log库
最后一步,配置build.gradle(module.app)
cmake {
cppFlags ''
arguments "-DANDROID_STL=c++_shared"
含义为解决编译能通过但是运行时找不到libc++_shared.so库
}
ndk{
abiFilters "arm64-v8a"
含义为解决,生成的库不是有效的elf,这里指定编译为64位arm库
}
如果有这种情况,请点击sync now
先打开android studio 后,手机先进入开发人员模式,
将手机插入电脑,此时会显示手机型号, 手机提示请选择允许调试。
打开logcat,点击手机上的按钮,将有如下显示。
打开生成的apk,将会有如下文件结果,证明成功。