我正在尝试在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文件末尾使用此粘贴做什么?
总而言之,我的问题是。
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在以前的版本中工作。