AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程

写在前面的废话

因项目需要移植算法到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

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第1张图片

2.创建一个新工程

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第2张图片

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第3张图片

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第4张图片

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第5张图片

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第6张图片

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头文件

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第7张图片

拷贝过去后对native-lib.cpp进行编辑引用头文件,尝试写个opencv语句,可以看到已经出现代码提示,如下图

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第8张图片

当然此时还不能编译,因为还没有将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的\

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第9张图片

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第10张图片

配置CMakeLists完成后,同步gradle,会在工程android视图下面看到,被应用的库

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第11张图片

理论上现在就可以编译了,编译试试。如下图,

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第12张图片

到这里我当时就懵逼了,这也就是我前面说的很简单巨坑

③NDK编译报错的解决方法

更换工程NDK设置,不要使用AndroidStudio SDK管理器里面下载的NDK工具包

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第13张图片

替换为R14的NDK包,为什么是R14?因为最新的R17也编译不了,说多了都是泪,这就是我这几天爬的坑!!!

自带工具下载的NDK不完整编译会报各种错误,较新的其他完整包如R17也不行,估计是OpenCV源码cmake配置的问题,R14我验证过没有问题请放心使用。

附上NDK下载链接 https://developer.android.google.cn/ndk/downloads/older_releases

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第14张图片

④编译工程

成功!!!

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第15张图片

说明下:我推荐的上面3篇文章,有提到abi版本过滤设置,请根据你的目标环境设置app下的gradle

例如,只需要armeabi-v7a,可以启用图中注释部分

abiFilters 'armeabi-v7a'

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第16张图片

另外如果除了opencv还有其他库要引入,请考虑使用jniLibs文件夹,并配合设置gradle。具体过程可以参见开头那三篇文章。



2018.05.30 工程源码:https://download.csdn.net/download/a390641326/10446257




可以微信小程序向我提问

AndroidStudio3.1.2+OpenCV3.4.1 Native层C/C++开发配置教程_第17张图片

                                  




你可能感兴趣的:(OPENCV,android)