簡體   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