让具有 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 中工作的主要内容,如果未能解决你的问题,请参考以下文章

NDK或OpenCV相机崩溃这个应用程序?为什么?

从 3.6 更新到 Android Studio 4.0 后构建具有 NDK 支持的项目时出错

JNI、NDK 和 OpenCV

Android Studio、Gradle、OpenCV 和 NDK

如何在带有 opencv 的 NDK 中使用 meanshift?

Ubuntu+IntelliJ IDEA+Android 配置NDK环境+openCV