源碼編譯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:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM