Android studio 上配置 opencv 的环境
前言,搭载用了一个下午一个晚上加半个半夜,现在是凌晨3点。经过不懈的查找文章、下载·······一系列操作,终于在Android真机 可以运行opencv程序了,放图庆祝下
前言:之前看了很多文章,方法都不一样,我也走了大概至少6个小时的坑,所以后面大家可以重新创建一个empty 程序 重头开始(这个可以解决手机上opencv manager package 安装的问题)
回到正题,讲下我的过程
- 下载最新的opencv-sdk ,保存好,然后注意了,我们在创建的新项目里导入 File- new- impor moudule 找到我们opencv-sdk目录下的sdk,命名为opencvsdk;
z
这个需要好一会儿时间1分钟左右,不要慌。这里如果的导入的时候报错,我当时解决办法是
在SDKTools 里面配置了** NDK 和CMake**, (大概就是我给出图片里面,其他的印象里都没点),这个点击finish即可,这里安装好,可以回去再导入opencv里的sdk文件(这一步很重要,我看其他文章很多都是导入java,我之前试了,da mei da)
2.sdk 文件导入后
我这里是这样显示的
3.接下来是修改app和opencv的 build.gradle
修改的第一点是
这4个opencv-gradle数值和自己app里面的数值标齐
第二点是检测 opencv-gradle 中的apply plugin: ‘com.android.library’ 这个是正确的,其他类型的改为这个就可以。
第三点是在 app-gradle 里面dependencies 添加
implementation project(’:opencvsdk’)
添加完自己SYNC一下。
(这里提个醒,其他文章里面写的是在 project structure里面 dependencies 然后app 然后➕ 号那边 添加 moudule ,我那里无法添加,所以就直接在代码里添加了。选一种就可,2种都用也行)
- 然后应该配置差不多了,自己找点源码(我用的是其他大佬的源码,也就不公开在文章贴出来了)
源码里有一点要注意的是代码里面的 onResume()方法,下面我贴上去的是新版的,直接复制使用即可。
public void onResume()
{
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
//super.onResume();
//OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}
我把我的 opencv-sdk-build-gradle代码贴出来,大家对下,应该问题不大(可能这里面有漏讲的,老铁们对下吧,印象里这里面我应该就复制粘贴改了改,其他没怎么动。太困了太困了,2021-0807-3.35 )
apply plugin: 'com.android.library'
println "OpenCV: " + project.buildscript.sourceFile
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
//buildToolsVersion "x.y.z" // not needed since com.android.tools.build:gradle:3.0.0
defaultConfig {
minSdkVersion 16
targetSdkVersion 30
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=c++_shared"
targets "opencv_jni_shared"
}
}
}
buildTypes {
debug {
packagingOptions {
doNotStrip '**/*.so' // controlled by OpenCV CMake scripts
}
}
release {
packagingOptions {
doNotStrip '**/*.so' // controlled by OpenCV CMake scripts
}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_6
targetCompatibility JavaVersion.VERSION_1_6
}
sourceSets {
main {
jniLibs.srcDirs = ['native/libs']
java.srcDirs = ['java/src']
aidl.srcDirs = ['java/src']
res.srcDirs = ['java/res']
manifest.srcFile 'java/AndroidManifest.xml'
}
}
externalNativeBuild {
cmake {
path (project.projectDir.toString() + '/libcxx_helper/CMakeLists.txt')
}
}
}
dependencies {
}
这个是app的 build-gradle
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation project(':opencvsdk')
}
晚安玛卡巴卡,大家加油!