【问题标题】:Android opencv and NDK in android studio [closed]android studio中的Android opencv和NDK [关闭]
【发布时间】:2014-07-30 13:05:41
【问题描述】:

我想在我正在创建的 android 应用程序中使用 openCV,但我不知道如何在 android studio 中设置 NDK 和 openCV。我还希望能够将我的项目上传到 github,以便其他人可以导入和处理它。有人可以解释一下我如何将 NDK 安装到 android studio 中并包含适用于 android 的 openCV(另外,我是否必须更改我的 .gitignore 文件)。

【问题讨论】:

  • Android Studio 中的 NDK 支持仍然不是官方的;一些好心人已经发布了不同的解决方法,但是随着新版本的 AS,这些方法往往会过时。集成诸如 OpenCV 之类的复杂库可能会特别痛苦。我建议坚持使用 ADT 或将您的 OpenCV 功能包装在库项目中,在 ADT 中维护后者,并在 AS 中使用此库。
  • 我对 ADT 的唯一问题是它为支持库创建了一个文件夹,这给我带来了版本控制方面的几个问题。

标签: android opencv android-ndk gradle android-studio


【解决方案1】:

对于 OpenCV,您还不能直接使用 Android Studio 默认方式调用 NDK。

但是您可以像在 Eclipse 项目中那样集成所有代码和 OpenCV,并配置 gradle 以在您的 Android.mk 文件上手动调用 ndk-build 并集成您的 .so 文件。

build.gradle 文件中,您可以这样做:

import org.apache.tools.ant.taskdefs.condition.Os
...

android {
  ...

  sourceSets.main {
      jniLibs.srcDir 'src/main/libs' // use libs directory to get .so files, instead of jniLibs
      jni.srcDirs = [] //disable automatic ndk-build call
  }

  // call regular ndk-build(.cmd) script from app directory
  task ndkBuild(type: Exec) {
      if (Os.isFamily(Os.FAMILY_WINDOWS)) {
          commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
      } else {
          commandLine 'ndk-build', '-C', file('src/main').absolutePath
      }
  }

  tasks.withType(JavaCompile) {
      compileTask -> compileTask.dependsOn ndkBuild
  }
}

【讨论】:

  • 我应该把 NDK 和 openCV 文件/文件夹放在哪里?
  • 您的意思是您还没有使用 NDK 吗?如果你想为 OpenCV 使用 Java API,你不需要 NDK。您只需将/sdk/native/libs/ 文件夹复制为Android Studio 项目中的jniLibs 文件夹。您甚至可以依赖本文档中描述的 OpenCV 管理器:docs.opencv.org/doc/tutorials/introduction/…,您可以从那里获取 OpenCV Java 库作为 Android Studio 项目:github.com/vRallev/OpenCV
  • 抱歉耽搁了,我之前没有使用过 NDK 或 OpenCV(适用于 android)。我的假设是需要 NDK(至少对于一些更高级的功能)。我已经下载并解压了安装 NDK 所需的两个文件夹;我该如何将它安装到项目中?此外,在我将/sdk/native/libs/ 复制为jniLibs 后,OpenCV 需要对 build.gradle 进行哪些更改
  • 您通常通过从应用程序目录调用位于 ndk 根目录的 ndk-build 来使用 ndk。它将您的 C/C++ 源代码从 jni 文件夹交叉编译到 libs/ABI/ 中的本机库(.so 文件)。您无需“安装”它,但可以将其位置添加到您的环境路径中,并使用我在上面编写的 sn-p 将其正确集成到您的 build.gradle 中。但是只有在使用 C/C++ 时才需要使用 NDK。也许Java wrapper 就够了,或者你也可以试试javacv。 jniLibs 中的 .so 文件已集成,无需对 build.gradle 进行任何更改。
  • 好的,我已经设置了环境路径,并且已经复制了 OpenCV libs 文件夹。现在您能否解释一下 Android.mk 文件是什么以及我将在哪里创建 jni 文件夹。我读到 Android.mk 文件应该包含 OpenCV.mk 但我没有将其复制过来?
猜你喜欢
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 2013-05-16
  • 2016-01-31
相关资源
最近更新 更多