在Android Studio(OpenCV)中使用NDK



我正在尝试使用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链接到它的外部安装,并使用javah为本机方法创建实现头,成功地使用了NDK。按照以下步骤设置Gradle以使用NDK:

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

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

  • 在src/main 中创建">jni"文件夹

  • Application.mk文件添加到jni

    APP_ABI:=亚美尼亚APP_PLATFORM:=android-9

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

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

    包括$(CLEAR_VARS(

    LOCAL_SRC_FILES:=main.cLOCAL_LDLIBS+=-logLOCAL_MODULE:=你好

    包括$(BUILD_ARED_LIBRARY(

  • 将此代码添加到渐变

        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"
        }
    }
    
  • 完成!

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

(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文件

按照这里的步骤:如何使用gradle构建工具在android studio中使用opencv?

相关内容

  • 没有找到相关文章

最新更新