Ubuntu16.04系统AndroidStudio 3.3.2下CMake 3.10.2+OpenCV 3.4.6 NDK开发
Ubuntu16.04系统AndroidStudio 3.3.2下CMake 3.10.2+OpenCV 3.4.6 NDK开发
如题
开发环境
Ubuntu 16.04
Android Studio 3.3.2
CMake 3.10.2
Android 7.0 (API Level 24)
OpenCV 3.4.6 Android SDK
Android NDK r20
具体步骤
1,环境准备
打开Android Studio 3.3.2,使用IDE安装相关环境
2,建立项目
3,导入OpenCV(Java端,可跳过)
此部分针对于Java代码中调用OpenCV库(由于直接使用Java,效率较低,不在此次说明之列,仅供参考)
若编写NDK时,调用C++库,可直接跳过此部分。
(1)在http://opencv.org/releases.html下载OpenCV 3.3.4 Android SDK,并解压
(2)在项目中导入OpenCV Android SDK
如下图:File -> New… -> Import Module,然后在Source Directory中选取 /${Path2OpenCVSDK}/sdk/java目录,Module Name变为“openCVLibrary334”
如下图:选择File -> Project Structure,左侧Modules - “app”,右侧选Dependencies,点击加号,并选择Module Dependency,在弹出框中选择:openCVLibrary334
(3)OpenCV Android SDK配置更新
由于OpenCV Android SDK编译历史与当前版本的差异,需要做一点的修改以适配当前的开发环境:
如下图:去掉不必要的行说明
如下图:OpenCVSDK默认的build.gradle文件设置为比较旧的版本可能会引发编译错误,修改openCVLibrary334\build.gradle compileSdkVersion为新的版本
4,使用OpenCV NDK
这里原本需要介绍完整的基于CMake来实现NDK的使用,
作者太懒,默认大家已有CMake及Android相关经验,
下面暂时先介绍相关的几个文件的修改和使用。
4.1 CPP编译依赖文件的准备(暴力复制方法,此方法复制内容较多,对于具体的lib包可根据使用平台选择性复制)
(1)把/${Path2OpenCVSDK}/OpenCV-android-sdk/sdk/native/jni/include复制到app/src/main/cpp中,把/${Path2OpenCVSDK}/OpenCV-android-sdk/sdk/native/libs下的文件夹复制到app/libs下
下图为include的部分内容:
(2)修改项目build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.test_opencv_ndk"
minSdkVersion 24
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags "-std=c++11", "-frtti", "-fexceptions"
abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
//!!!注意此部分设置编译参数和abi使用的平台
}
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
//!!!注意此部分设置jniLibs的目录
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
//!!!注意此部分设置对应CMakeList.txt的路径
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation project(':openCVLibrary346')
}
(3)修改app/src/main/cpp/CMakeLists.txt
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
set(CMAKE_VERBOSE_MAKEFILE on)
# opencv