写在前面的废话
因项目需要移植算法到Android平台,本人2年多没有做android开发了,AS近几年变动较大,因为这个配置问题,折磨了我好几天,最后居然发现是个很小的问题导致的巨大的坑,于是决定写下此文帮助遇到同样问题的朋友,快速爬坑,以便节省您宝贵的时间。
网上很多版本教程都是很久之前的,不适合新手拿来用,而且鱼龙混杂、版本繁多,看了根本不知道怎么下手。读此文前,推荐读以下3篇优秀的文章看下opencv整体配置(前面大部分配置与这两文差别不大),本文重点在Native层C++开发爬坑
使用Android Studio 3.0 (>=2.2)和Cmake (CMakeLists)让OpenCV 3.4 飞起来
Android Studio 2.2 使用 OpenCV 的两种方式(傻瓜式教程)
2017年Android Studio做NDK情况调查
Android Studio C++配置
1.准备好SDK环境
参照谷歌官文:https://developer.android.google.cn/studio/projects/add-native-code#link-gradle
在SDK Manager下安装好CMake\LLDB\NDK
2.创建一个新工程
3.配置OpenCV Android SDK
注意此处:不同于前面给的3篇文章,本文不需要创建jniLibs文件夹和对jniLibs的gradle设置,新的AS已经可以自动打包到apk
此文用官方编译发布的OpenCV Android SDK 3.4.1来进行演示(不含contrib库),contrib库需要自己编译,如何编译以后再写。
①opencv头文件
以我的为例,sdk下载在桌面,C:\Users\xy\Desktop\opencv-3.4.1-android-sdk\
将C:\Users\xy\Desktop\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\native\jni 文件夹内的include文件夹拷贝到工程C:\Users\xy\Desktop\CSDN\app\src\main\cpp目录下,这样以便C++编程时能使用OpenCV头文件
拷贝过去后对native-lib.cpp进行编辑引用头文件,尝试写个opencv语句,可以看到已经出现代码提示,如下图
当然此时还不能编译,因为还没有将opencv的库信息导入工程
②编辑CMakeLists.txt
推荐使用上面给出的2、3文章链接的方式导入opencv库信息,以我的sdk目录为例应该如下设置:
#参考 https://blog.csdn.net/u010677365/article/details/76922541
set(OpenCV_STATIC ON)#1
set(OpenCV_DIR C:/Users/xy/Desktop/opencv-3.4.1-android-sdk/OpenCV-android-sdk/sdk/native/jni)#2
find_package(OpenCV REQUIRED)#3
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib}
${OpenCV_LIBS}#4
)
请注意下图sdk路径分隔符号表示方式为/而不是winows的\
配置CMakeLists完成后,同步gradle,会在工程android视图下面看到,被应用的库
理论上现在就可以编译了,编译试试。如下图,
到这里我当时就懵逼了,这也就是我前面说的很简单巨坑
③NDK编译报错的解决方法
更换工程NDK设置,不要使用AndroidStudio SDK管理器里面下载的NDK工具包
替换为R14的NDK包,为什么是R14?因为最新的R17也编译不了,说多了都是泪,这就是我这几天爬的坑!!!
自带工具下载的NDK不完整编译会报各种错误,较新的其他完整包如R17也不行,估计是OpenCV源码cmake配置的问题,R14我验证过没有问题请放心使用。
附上NDK下载链接 https://developer.android.google.cn/ndk/downloads/older_releases
④编译工程
成功!!!
说明下:我推荐的上面3篇文章,有提到abi版本过滤设置,请根据你的目标环境设置app下的gradle
例如,只需要armeabi-v7a,可以启用图中注释部分
abiFilters 'armeabi-v7a'
另外如果除了opencv还有其他库要引入,请考虑使用jniLibs文件夹,并配合设置gradle。具体过程可以参见开头那三篇文章。
2018.05.30 工程源码:https://download.csdn.net/download/a390641326/10446257
可以微信小程序向我提问