Android Studio,Gradle,OpenCV和NDK

Rya*_*ner 11 android opencv gradle android-ndk android-studio

我试图在Android Studio上测试OpenCV Android,我对如何包含NDK感到困惑.

我想要做的是运行OpenCV附带的样本.在提供的6个样本中,我成功地运行了4个样本.例外是面部检测和本机活动.

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

谷歌搜索我发现了一堆讨论,但并不真正了解它们.这是我第一次尝试使用NDK和OpenCV,我的Gradle理解是有限的.

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

export 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'))
Run Code Online (Sandbox Code Playgroud)

}

在build.gradle文件的末尾,我应该怎么做这个粘贴?

总之,我的问题是.

  1. 如何让Android Studio读取NDK变量?
  2. 什么是jniFolders?
  3. 仅仅粘贴在build.gradle文件的末尾就足够了吗?

谷歌集团关于Gradle和NDK的讨论


对于遇到这种情况的人来说,除了Xaviers anwser之外我是如何解决它的.首先,我在docs目录中阅读NDK附带的OVERVIEW.html.然后我将.mk和.cpp文件编译成.so文件.我在示例jni目录中进行了此操作.这在libs文件夹中创建了.so文件,我将其复制到Xavier给出的目标位置.

Xav*_*het 32

如果你有使用ndk构建的库,并希望将它们放在支持gradle的android项目中(使用版本0.7.+的插件),你可以将它们放入

src/main/jniLibs/<abi>/libfoo.so
Run Code Online (Sandbox Code Playgroud)

例如:

src/main/jniLibs/armeabi-v7a/libfoo.so
src/main/jniLibs/x86/libfoo.so
Run Code Online (Sandbox Code Playgroud)

他们会自动打包.

如果要将它们保存在native-libs文件夹中,可以将以下内容放在gradle文件中:

android {
    sourceSets.main {
        jniLibs.srcDirs = ['native-libs']
    }
}
Run Code Online (Sandbox Code Playgroud)

所有这一切确实告诉gradle主要源集的jniLibs文件夹(相对于项目根目录).

你展示的片段正在做一些与众不同的事情.它告诉包任务还包括一些本机库.这是一个hack,曾经在以前的版本中使用不再受支持的任务的未记录的API.