繁体   English   中英

在 Android Studio (OpenCV) 中使用 NDK

[英]Use NDK in Android Studio (OpenCV)

我正在尝试使用 NDK 在 Android Studio 中设置 OpenCV。 我遵循的步骤是:

  1. OpenCV创建一个库项目并将其导入MyProject
  2. 将所有 OpenCV库文件添加到/jni文件夹。
  3. 创建Android.mk文件

但是,当我使用ndk-build运行 Android.mk 时,出现此错误:

Nothing to be done for `.../MyProject/jni/Android.mk'.

这是Android.mk的内容:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on

include /.../MyProject/jni/OpenCV.mk

我被困在建立图书馆,有什么帮助吗?


解决方案

我设法通过将 gradle 链接到它的外部安装来使用 NDK,并且还使用javah为本机方法创建实现标头。 按照以下步骤设置 Gradle 以使用 NDK:

  • 安装ndk(它没有内置在 Android Studio 中,因此需要手动安装)

  • 在 local.properties 中设置 ndk.dir 并在 gradle.properties 中设置 ndkDir 以链接到安装路径

  • 在 src/main 中创建“ jni ”文件夹

  • Application.mk文件添加到 jni

    APP_ABI := armeabi APP_PLATFORM := android-9

  • Android.mk文件添加到 jni(更改 LOCAL_SRC_FILES 和 LOCAL_MODULE 值)

    LOCAL_PATH := $(调用我的目录)

    包括 $(CLEAR_VARS)

    LOCAL_SRC_FILES := main.c LOCAL_LDLIBS += -llog LOCAL_MODULE := 你好

    包括 $(BUILD_SHARED_LIBRARY)

  • 将此代码添加到gradle

     sourceSets.main.jni.srcDirs = [] // take the built .so files and place them in jniLibs //noinspection GroovyAssignabilityCheck task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') { commandLine "$ndkDir/ndk-build", 'NDK_PROJECT_PATH=build/intermediates/ndk', 'NDK_LIBS_OUT=src/main/jniLibs', 'APP_BUILD_SCRIPT=src/main/jni/Android.mk', 'NDK_APPLICATION_MK=src/main/jni/Application.mk' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn ndkBuild }
  • 将 javah 设置为外部工具(指向您的安装目录)程序:/usr/bin/javah 参数:-v -jni -d $ModuleFileDir$/src/main/jni $FileClass$ 工作目录:$SourcepathEntry$

  • 在包含本机方法的 .java 文件上运行 javah -> 创建标头

  • 创建实现文件

  • 在 gradle 中指定模块:

     defaultConfig { minSdkVersion 9 targetSdkVersion 21 versionCode 4 versionName '1.11' ndk { moduleName "hello" } }
  • 完毕!

我发布了一篇关于如何使用包含 Android Studio 和 Gradle 的 OpenCV 构建 Android NDK 应用程序的新文章。 更多信息可以看这里,我总结了两种方法:

(1) 在 Gradle 任务中运行ndk-build

sourceSets.main.jni.srcDirs = []

task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
    ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
    commandLine "$ndkDir/ndk-build",
            'NDK_PROJECT_PATH=build/intermediates/ndk',
            'NDK_LIBS_OUT=src/main/jniLibs',
            'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
            'NDK_APPLICATION_MK=src/main/jni/Application.mk'
}

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

(2) 使用外部工具运行ndk-build

参数: NDK_PROJECT_PATH=$ModuleFileDir$/build/intermediates/ndk NDK_LIBS_OUT=$ModuleFileDir$/src/main/jniLibs NDK_APPLICATION_MK=$ModuleFileDir$/src/main/jni/Application.mk APP_BUILD_SCRIPT=$ModuleFileDir$/src/main/jni/Android.mk V=1

更多信息可以在这里看到

您还不能使用Android Studio进行NDK开发,但您可以在新版Gradle 0.7.2+的项目中添加Open CV的预构建*.so文件

按照这里的步骤操作: How to use opencv in android studio using gradle build tool?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM