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 studio和 gradle android 库

android studio怎样配置gradle本地路径

android studio Gradle升级到3.5.0遇到的坑

android Studio 降级gradle

android studio怎么配置gradle