Android Studio、Gradle、OpenCV 和 NDK
Posted
技术标签:
【中文标题】Android Studio、Gradle、OpenCV 和 NDK【英文标题】:Android Studio, Gradle, OpenCV and NDK 【发布时间】:2014-01-22 04:45:04 【问题描述】:我正在尝试在 android Studio 上测试 OpenCV Android,我对如何包含 NDK 感到困惑。
我想做的是运行 OpenCV 附带的示例。在提供的 6 个样本中,我成功运行了 4 个。例外是面部检测和原生活动。
我怀疑原因是我没有正确设置我的 NDK。
谷歌搜索我发现了一堆讨论,但并不真正理解它们。这是我第一次尝试同时使用 NDK 和 OpenCV,我对 Gradle 的理解有限。
我在我的 .bash_profile 中设置了一个环境变量
导出 ANDROID_NDK=pathTo/android-ndk-r9
我不明白如何将它送到工作室。
我看到对 jniFolder 的引用,但不明白这些是什么,我现在应该关心。 ***.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 目录中就地执行了此操作 这在我复制到 Xavier 给出的目的地的 libs 文件夹中创建了 .so 文件。
【问题讨论】:
我设法在没有编译任何东西的情况下做到了这一点。查看:***.com/a/35135495/5611377,也许会有所帮助。 【参考方案1】:如果您有使用 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 文件夹在哪里(相对于项目根目录。)
您展示的 sn-p 正在做一些不同的事情。它告诉包任务还包括一些本机库。这是一个 hack,过去在以前的版本中使用不再支持的任务的未记录 API。
【讨论】:
在库项目中不起作用,您必须将.so文件复制到您的应用项目中,然后才能完美运行。 是的,这将在插件的下一个版本中修复。 是否发布了从库项目中导出二进制“*.so”文件的功能? 是的 aar 现在应该打包他们的 so 文件了。 如果 *.so 文件在库项目中,我如何使用 gradle 0.9 执行此操作?以上是关于Android Studio、Gradle、OpenCV 和 NDK的主要内容,如果未能解决你的问题,请参考以下文章
如何建立与 Android studio和 gradle android 库