1、前言
Android Studio在2.2版本更新之后加入了CMAKE方式配置NDK的方法,这大大简化了之前通过Android.mk和Application.mk两个本地配置文件进行NDK开发的方式。这种方法在后续更新的版本中不断增强,越来越好用,越来越不会出问题。本文基于Android Studio3.1的版本进行配置,使用CMAKE的配置方式配置OpenCV最新版(截止发文时间是OpenCV 3.4.1),并在最后给出一个灰度转换的测试Demo。
如果你想通过Android NDK开发配置OpenCV,本文或许对你有用。
2、开发环境
Android Studio 3.0
OpenCV for Android 3.4.1
Android NDK 16
CMAKE
注意:如果直接使用AS下载的NDK,则为测试版17,可能会出现以下问题:
Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug'
主要是ndk版本问题,重新下载一个低一点的版本就好了。
3、opencv for android的配置
注意:这里是在一个旧项目上添加c++支持,我们需要在app目录下自己建立一个CMakeLists.txt文件,而且需要在src/main文件夹下新建一个cpp的文件夹
3.1. opencv的配置:
- include文件
在下载好的OpenCV压缩包中,打开路径下的.\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\native\jni 有一个include文件夹,把这个文件夹复制粘贴至我们的OpenCVTest项目中,路径为src/main/cpp
- jni文件
然后是动态库(.so文件),打开路径下的.\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\native ,有一个libs 文件夹,这个文件夹里面是所有版本的abi的so文件。复制粘贴到我们的项目中,路径为app目录下的libs。
注意:
1. 无论是include还是libs的路径都可以自定义,习惯上是这样放,但其实只要在之后的CMakeList配置文件里面设置正确就没有问题。
2. 值得一提的是,OpenCV在最新版本中把动态库和静态库分开了,分别放在libs和staticlbs两个文件夹中,之前是放在一个文件夹里的。我们测试Demo仅需要动态库和头文件即可。
目录如下图所示:
3.2. gradle的配置
在android 节点中添加如下代码:
sourceSets{
main{
jniLibs.srcDirs = ['libs']
jni.srcDirs = []
}
}
这一步设置了动态链接库的路径地址,用于项目构建时,Native寻找和链接相关的so文件。
最终的build.gradle如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 15
targetSdkVersion 26
ver