源码编译opencv的安卓Android库

Posted 无左无右

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源码编译opencv的安卓Android库相关的知识,希望对你有一定的参考价值。

因为项目需要,稍微改了opencv一点源码,这个时候就需要源码编译opencv的库了。我pc机器上面试了没有问题,但是我们项目是跑在移动设备安卓上面的,算法通过jni打包接口供上层java调用,opencv用的安卓版本的,这就坑爹了,没办法,我就编译安卓版本的opencv吧,这里面的坑真多。
参考链接:
https://www.jianshu.com/p/925614d6e9e0 OpenCV3.4源码交叉编译android
https://blog.csdn.net/Martin_chen2/article/details/80463610
https://www.jianshu.com/p/288ca9327b32 源码编译Android openCV+openCV_contrib库

//下面这个链接很重要,生成libopencv_java.so。
https://blog.csdn.net/u010363893/article/details/54892448?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1

//下面这个链接我按照他的来的,没有成功,报错。报错warning: /bin/ld: skipping incompatible,然后是找不到opencv库什么的
https://www.cnblogs.com/gao-chun/p/4971126.html android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!

我的环境是Ubuntu16.04
首先是需要下载安装ndk
ndk:android-ndk-14b

cd /opt        ###/opt为android-ndk-r14b所在的目录,根据你对应的目录改变
./android-ndk-r14b/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.9 --platform=android-21 --install-dir=./android-toolchain-r14b/android-armv7 --arch=arm --force

上面这个路径随意。
当然我整的时候各种问题,还有cmake版本过低的问题。还下了一个android-ndk-r21的。

还有下面的指令,一开始明明加了参数ANDROID_ARCH_ABI=arm64-v8a,死活生成armeabi-v7a啊,然后去
opencv-3.2.0/platforms/android/android.toolchain.cmake改这个,直接强制SET(ANDROID_ABI "arm64-v8a")

#line638
# choose target ABI
__INIT_VARIABLE( ANDROID_ABI VALUES ${ANDROID_SUPPORTED_ABIS} )
#####################################################YHL ADD yhl 20200409###########################################################
SET(ANDROID_ABI "arm64-v8a")
//0410-arm64可以 但是没有so
export ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DCMAKE_ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b -DANDROID_NATIVE_API_LEVEL=21 -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_JAVA=ON -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -D WITH_CUDA=OFF -D WITH_MATLAB=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/data_1/Yang/software/opencv-3.2.0/0myfile-android/install-now-1 ..

然后敲

make -j4
make install -j4

按照上面的这个命令,只有.a,没有libopencv_java3.so。因为一开始安卓用的只有libopencv_java3.so这个,官方下的库也是在OpenCV-android-sdk/sdk/native/libs/arm64-v8a文件夹下

而我的,

就是没有so
然后同事告诉我

//同事告诉我加 -DBUILD_SHARED_LIBS=ON             
export ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DCMAKE_ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b -DANDROID_NATIVE_API_LEVEL=21 -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_JAVA=ON -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -D WITH_CUDA=OFF -D WITH_MATLAB=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/data_1/Yang/software/opencv-3.2.0/0myfile-android/install-now-2 ..


变成都是so了。。。
但是总感觉这些已经能用了。然后无意间查资料发现,说
”PS:编译如果需要生成libopencv_java.so,需要安装ant工具,apt-get install ant 即可。通过修改CMakeCache.txt可以修改编译配置,里面有BUILD_OPENCV_JAVA,怎会产生libopencv_java.so。“
然后我敲了:
sudo apt-get install ant
再加上 -DBUILD_OPENCV_JAVA=ON

//0410-arm64可以 但是没有so  -DBUILD_OPENCV_JAVA=ON
export ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/android/android.toolchain.cmake -DCMAKE_ANDROID_NDK=/data_2/everyday/down_load/android-ndk/14/android-ndk-r14b -DANDROID_NATIVE_API_LEVEL=21 -DBUILD_ANDROID_PROJECTS=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release -DBUILD_JAVA=ON -DBUILD_OPENCV_JAVA=ON -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -D WITH_CUDA=OFF -D WITH_MATLAB=OFF -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/data_1/Yang/software/opencv-3.2.0/0myfile-android/install-now-0413_0 ..

哈哈,终于有了libopencv_java3.so:

以上是关于源码编译opencv的安卓Android库的主要内容,如果未能解决你的问题,请参考以下文章

怎么在vs2022中编译opencvmat类的源码

Android源码编译

NDk编译opencv for Android,并引用在Unity3d游戏中的一般步骤

编译OpenCV3.3源码生成Android SDK

Xamarin Android 片段库

使用Android Studio调试安卓系统源代码:将AOSP源码整体导入到AS