我正在尝试使用NDK在Android Studio中设置OpenCV。我遵循的步骤是:
- 为OpenCV创建库项目,并将其导入MyProject
- 将所有OpenCV库文件添加到/jni文件夹中
- 创建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?