我想尝试SDK附带的示例代码之一,即" tutorial-2-mixedprocessing"。我按照以下步骤操作:
1)导入项目 - >选择的教程目录
2)我将其命名为“tutorial-2-mixedprocessing1”,勾选3个选项(“尽可能替换jars& lib源代码”和“创建Gradle样式的模块名称”)
3)警告:“当前插件中已弃用NDK集成”我点击了“Set" android.useDeprecatedNdk = true"在gradle.properties中继续使用当前的NDK集成“
4)导入模块 - >在我的案例中选择的“C:\ SDKs \ OpenCV-android-sdk \ sdk \ java”中的java模块 - >勾选左侧3复选框
5)错误:原因:无法使用哈希字符串找到目标' android-14' in:C:\ Users \ c010 \ AppData \ Local \ Android \ Sdk安装缺少的平台和同步项目。我更改了compileSdkversion,buildToolsVersion和targetSdkVersion并同步。错误消失了。
6-7)打开模块设置 - >依赖关系添加Opencv模块作为模块依赖关系。添加了NDK位置(在我的情况下为“C:\ SDKs \ android-ndk-r12-beta2”)
8)构建 - > make project leads 错误:(2,33)opencv2 / core / core.hpp:没有这样的文件或目录
在Eclipse中我会添加一些包含路径,但我不知道如何在Android Studio中执行此操作。我认为编辑Android.mk可以提供帮助:
我的Android.mk是
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
ifdef OPENCV_ANDROID_SDK
ifneq ("","$(wildcard $(OPENCV_ANDROID_SDK)/OpenCV.mk)")
include ${OPENCV_ANDROID_SDK}/OpenCV.mk
else
include ${OPENCV_ANDROID_SDK}/sdk/native/jni/OpenCV.mk
endif
else
include ../../sdk/native/jni/OpenCV.mk
endif
LOCAL_MODULE := mixed_sample
LOCAL_SRC_FILES := jni_part.cpp
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
我将它改为普通绝对路径
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include C:\SDKs\OpenCV-android-sdk\sdk\native\jni\OpenCV.mk
LOCAL_MODULE := mixed_sample
LOCAL_SRC_FILES := jni_part.cpp
LOCAL_LDLIBS += -llog -ldl
include $(BUILD_SHARED_LIBRARY)
没有帮助。
我添加了' OPENCV_ANDROID_SDK:= C:\ SDKs \ OpenCV-android-sdk \'在“ifdef ...”之前,相同的结果。
我添加了' LOCAL_C_INCLUDES + = C:\ SDKs \ OpenCV-android-sdk \ sdk \ native \ jni \ include' ,结果相同。
我编辑了看起来像
的gradle文件apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "org.opencv.samples.tutorial2"
minSdkVersion 8
targetSdkVersion 8
ndk {
moduleName "mixed_sample"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile project(':openCVLibrary310')
}
我按如下方式更改了ndk括号:
ndk {
moduleName "mixed_sample"
cFlags += "-I${file("C:/SDKs/OpenCV-android-sdk/sdk/native/jni/include")}".toString()
}
错误:错误:null-IC:\ SDKs \ OpenCV-android-sdk \ sdk \ native \ jni \ include:参数无效
它没有接受cppFlags 错误:(14,0)找不到属性' cppFlags'在com.android.build.gradle.internal.dsl.NdkOptions_Decorated@797a42f2。
答案 0 :(得分:1)
如果你想制作NDK模块,你需要将你的gradle改为实验。在opencv gradle文件和gradle文件中。
所以,首先更改你的gradle模块:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
你的应用build.gradle应该是这样的。
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "your package name"
minSdkVersion.apiLevel = 15
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
}
android.ndk {
moduleName = "viulib_interface_jni"
cppFlags.add("-fexceptions")
cppFlags.add("-I" + file("src/main/jni").absolutePath)
stl = "gnustl_shared" // Which STL library to use: gnustl or stlport
ldLibs.addAll(["android", "EGL", "GLESv2", "dl", "log", "z"])
}
android.productFlavors {
create("arm") {
ndk.with{
abiFilters.add("armeabi")
File curDir = file('./')
curDir = file(curDir.absolutePath)
String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi/"
}
}
create("armv7") {
ndk.with {
abiFilters.add("armeabi-v7a")
File curDir = file('./')
curDir = file(curDir.absolutePath)
String libsDir = curDir.absolutePath + "/src/main/jniLibs/armeabi-v7a/"
}
}
}
}
dependencies {
compile fileTree(include: ['*.jar', '*.so'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
compile project('openCVLibrary310')
}
我使用gradle 0.4.0 experimetal,但您也可以选择gradle 0.7.0,但在这种情况下,您需要查看gradle 0.7.0语法中的更改。
我建议您开始创建JNI桥以使用opencv c ++函数,并在尝试为opencv库创建构建gradle文件之后。
请勿忘记将opencv文件夹导入file-> new->导入项目中的库。 希望,这段代码会有所帮助
干杯。
答案 1 :(得分:0)
在build.gradle中添加以下行
sourceSets.main {
jni.srcDirs = [] //disable automatic ndk-build call
jniLibs.srcDir 'src/main/jniLibs'
}
buildTypes { ... }