OpenCV源码编译JNI

OpenCV源码编译JNI并添加contrib模块

重新编译OpenCV是因为官网的JNI会报一些找不到模块的错误,比如找不到glob_rec。
错误信息:Error: Requested object was not found (could not open directory: /data/app/com.example.demo-2/base.apk!/lib/arm64-v8a) in glob_rec

一、Windows编译工具和环境

环境准备:window10+opencv-4.5.3+opencv_contrib-4.5.3+cmake+MinGW+apache-ant-1.10.13

opencv 主页:https://github.com/opencv
cmake下载:https://cmake.org/download/
MinGW 下载:https://sourceforge.net/projects/mingw-w64/files/
ant下载:https://ant.apache.org/manualdownload.cgi

1、OpenCV源码和OpenCV_Contrib模块,在主页中都有,选择好对应版本git就可以了
2、CMake下载WIndow64 Installer 的msi后安装就行
3、MinGW下载x86_64-win32-sjlj解压到电脑C盘后在系统环境中添加路径
4、ant下载后解压就行

准备的资源
android-build是用来保存后面编译结果的目录

二、开始编译

1、 打开cmake ,填写opencv-4.5.3 路径以及 opencv-build 路径

1

2、点击Add Entry添加下面属性
#编译后的 opencv 应用在 android 系统cpu 所对应的架构
#armeabiv-v7a:第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
#arm64-v8a:第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
#armeabi:第5代、第6代的ARM处理器,早期的手机用的比较多。
#x86:平板、模拟器用得比较多。
#x86_64:64位的平板
ANDROID_ABI:arm64-v8a
 
#当前windows 安装android studio sdk 路径
ANDROID_SDK:C:/Users/xxx/AppData/Local/Android/Sdk
 
#当前windows 安装android studio ndk 路径
ANDROID_NDK:C:/Users/xxx/AppData/Local/Android/Sdk/ndk/21.0.6113669
 
#默认API为21
ANDROID_NATIVE_API_LEVEL:21
 
#填入ANT路径下的bin(用于java 封装,便于 AS 导入module)
ANT_EXECUTABLE:C:/Users/xxx/Desktop/123/apache-ant-1.10.13/bin
 
#根据需求写入c++_static或c++_shared(默认是gnustl_static)
ANDROID_STL:c++_static

ABI是Android的系统版本,每次只能编译一个版本,更换版本需要从file->Delete catch

3、点击Configure 按钮,弹出对话框,设置MinGW Makefiles编译,选择Specify toolchain file for cross-compiling

在这里插入图片描述
点击next ,选择ndk 下的toolchain 编译:C:/Users/xxx/AppData/Local/Android/Sdk/ndk/21.1.6352462/build/cmake/android.toolchain.cmake

4、点击finish 开始编译(这边是需要联网的)。编译完如果属性面板显示红色,再点击一次的Configure 按钮,看到 Java wrappers:YES 说明编译成功.

编译成功

5、添加opencv-contrib模块,根据需要调整参数
#添加opencv_contrib-4.5.5扩展模块
OPENCV_EXTRA_MODULES_PATH:E:/opencv/opencv_contrib-4.5.5/modules
BUILD_ANDROID_PROJECTS=ON
BUILD_ANDROID_EXAMPLES=ON
BUILD_PERF_TESTS=OFF
BUILD_TESTS=OFF
BUILD_opencv_world=OFF
BUILD_SHARED_LIBS=OFF
#添加移动端的并行架构支持
WITH_OPENCL=ON
#建议开启共享虚拟内存
WITH_OPENCL_SVM=ON
#这个属性会将需要库加载,解决找不到glob_rec问题
OPENCV_DISABLE_FILESYSTEM_SUPPORT=ON

调整完后再次点击Configure,如果显示红色,再点击一次的Configure 按钮,完成后点击Generate
完成

三、MinGW 编译

1、在刚刚建的android-build\opencv_android目录 下添加文件 local.properties
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Thu Mar 09 11:42:36 CST 2023
sdk.dir=C\:\\Users\\xxx\\AppData\\Local\\Android\\Sdk
ndk.dir=C\:\\Users\\xxx\\AppData\\Local\\Android\\Sdk\\ndk\\21.0.6113669
2、右击android-build -->Git Bash Here

输入命令:mingw32-make.exe
编译成功后
输入命令:mingw32-make.exe install
成功后在android-build\install\sdk目录下面就是需要的jni包

下面是我编译好的文件:
https://download.csdn.net/download/xiong_7631/87569619

猜你喜欢

转载自blog.csdn.net/xiong_7631/article/details/129532826