让具有 NDK 支持的 OpenCV 在 Android Studio 中工作
Posted
技术标签:
【中文标题】让具有 NDK 支持的 OpenCV 在 Android Studio 中工作【英文标题】:Getting OpenCV with NDK support to work in Android Studio 【发布时间】:2016-05-28 12:35:39 【问题描述】:我对 openCV 和 android 编程非常陌生,我想在我的项目中使用 openCV。现在我正在尝试在我的 android studio 中运行 openCV 的第二个教程,但我总是收到以下 NDK 错误:
Error:Execution failed for task ':openCVTutorial2MixedProcessing:compileDebugNdk'.
NDK 未配置。 从http://developer.android.com/tools/sdk/ndk/.Then 下载 NDK,在 local.properties 中添加 ndk.dir=path/to/ndk。 (在 Windows 上,请确保转义反斜杠,例如 C:\ndk 而不是 C:\ndk)
然后我查看了互联网,有些人建议我应该将这些添加到我的 gradle.build 文件中:
jniLibs.srcDirs = ['native-libs']
jni.srcDirs = [] //disable automatic ndk-build
添加这些后它可以工作,但我收到以下错误:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.opencv.samples.tutorial2-2/base.apk"],nativeLibraryDirectories=[/data/app/org.opencv.samples.tutorial2-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libopencv_java3.so"
这是我的 gradle 文件:
apply plugin: 'com.android.application'
android
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig
applicationId "org.opencv.samples.tutorial2"
minSdkVersion 21
targetSdkVersion 23
ndk
moduleName "mixed_sample"
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
sourceSetsmain jni.srcDirs = ['src/main/jni','src/main/jniLibs']
jniLibs.srcDirs = ['native-libs']
jni.srcDirs = [] //disable automatic ndk-build
dependencies
compile project(':openCVLibrary310')
【问题讨论】:
【参考方案1】:嗯,您粘贴的代码完全符合注释所说的:
jni.srcDirs = [] //disable automatic ndk-build
您看不到第一个错误是因为跳过了整个 compileDebugNdk
步骤。这意味着您的应用程序的 NDK 端未构建,这意味着 APK 中没有任何 OpenCV 库,这意味着 Java 无法加载它们,因此 couldn't find "libopencv_java3.so"
。
您需要编写一些逻辑来构建项目的 C++ 端。目前有几种方法可以做到这一点,其中最简单的方法是参考NDK samples,它记录了如何仅通过 build.gradle 构建和使用本机代码。 build.gradle file from hello-libs 是开始具有 3rd 方依赖项的项目的好地方。
【讨论】:
以上是关于让具有 NDK 支持的 OpenCV 在 Android Studio 中工作的主要内容,如果未能解决你的问题,请参考以下文章
从 3.6 更新到 Android Studio 4.0 后构建具有 NDK 支持的项目时出错
Android Studio、Gradle、OpenCV 和 NDK