我无法使用原生OpenCV在Android Studio中使用我的C代码。 OpenCV通过Java包装器工作,但是在过去的几天里我一直在试图让它与本机库一起工作。 (我有一些依赖于我需要在项目中使用的OpenCV的C代码)
为了解决这个问题我正试图让在AS中构建的tutorial-2-mixedprocessing OpenCV示例项目。
OpenCV位于项目的单独模块中,jniLibs中包含共享库(.so,.a文件),标头位于jni中。应用程序模块依赖于它。在构建时,请参阅下面的图片以获取示例代码和结果。
显然找不到标题? 我已经尝试在gradle文件中的android.ndk中将-I标志添加到CFlags但没有成功:
CFlags.add("-I${file("path/to/opencv-android-sdk/native/jni/include/")}".toString())
我还尝试将标题放在app模块的jni文件夹中,以及使用不同版本的Android Studio和Gradle。
我一直在网上找到过时的解决方案和冲突的信息,似乎Android Studio中的构建系统在版本之间仍然发生了很大的变化。我也是Android开发和NDK的新手,所以如果这是一个愚蠢的问题,请道歉。我真正需要的是一个可以适应我的项目的工作样本。
我错过了什么?
项目结构:
Project gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle-experimental:0.7.2'
}
}
allprojects {
repositories {
jcenter()
}
}
OpenCV库模块gradle:
apply plugin: 'com.android.model.library'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig {
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 23
}
buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.txt'))
}
}
}
}
应用程序模块gradle:
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig {
applicationId = "org.opencv.samples.tutorial2"
minSdkVersion.apiLevel = 21
targetSdkVersion.apiLevel = 23
}
ndk {
moduleName = "mixed_sample"
//CFlags.add("-I${file("path/to/opencv-android-sdk/native/jni/include/")}".toString())
}
buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-rules.txt'))
}
}
}
}
dependencies {
compile project(':openCVLibrary2411')
}