我正在尝试在Android Studio上测试OpenCV Android,我对如何包含NDK感到困惑。

我要做的是运行OpenCV附带的示例。在提供的6个样本中,我设法成功运行了4个。面部检测和本地 Activity 除外。

我怀疑原因是我没有正确设置我的NDK。

谷歌搜索我发现了很多讨论,但并不太了解。这是我第一次尝试同时使用NDK和OpenCV,并且我对Gradle的理解有限。

我在.bash_profile中设置了一个环境变量

导出ANDROID_NDK = pathTo/android-ndk-r9

我不明白如何将它带到工作室。

我看到了对jniFolder的引用,但不了解它们是什么,我现在应该在乎。
Stackoverflow.com/questions/17767557

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders = new HashSet<File>()
pkgTask.jniFolders.add(new File(projectDir, 'native-libs'))

}

我应该在build.gradle文件末尾使用此粘贴做什么?

总而言之,我的问题是。
  • 如何让Android Studio读取NDK变量?
  • jniFolders到底是什么?
  • 仅将其粘贴到build.gradle文件的末尾就足够了吗?

  • Google Group Discussions on Gradle and NDK

    对于遇到此问题的任何人,除了Xaviers anwser之外,这就是我解决它的方式。
    首先,我在docs目录中阅读了NDK随附的OVERVIEW.html。
    然后,我将.mk和.cpp文件编译为.so文件。我在示例jni目录中就地完成了此操作
    这在libs文件夹中创建了.so文件,我将其复制到Xavier给出的目标位置。

    最佳答案

    如果您有使用ndk构建的库,并希望将它们放入启用gradle的android项目中(使用插件的0.7。+版本),则可以将其放入

    src/main/jniLibs/<abi>/libfoo.so
    

    例如:
    src/main/jniLibs/armeabi-v7a/libfoo.so
    src/main/jniLibs/x86/libfoo.so
    

    他们会自动打包。

    如果要将它们保留在native-libs文件夹中,可以将以下内容放入gradle文件中:
    android {
        sourceSets.main {
            jniLibs.srcDirs = ['native-libs']
        }
    }
    

    所有这一切实际上是告诉gradle主要源集的jniLibs文件夹在哪里(相对于项目根)。

    您显示的代码 fragment 执行的操作有所不同。它告诉打包任务还包括一些 native 库。这是一种黑客,过去曾使用不再受支持的任务的未记录API在以前的版本中工作。

    08-28 17:35
    查看更多