在Android Studio

时间:2016-08-10 13:39:12

标签: opencv android-studio android-ndk android-gradle

我无法使用原生OpenCV在Android Studio中使用我的C代码。 OpenCV通过Java包装器工作,但是在过去的几天里我一直在试图让它与本机库一起工作。 (我有一些依赖于我需要在项目中使用的OpenCV的C代码)

为了解决这个问题我正试图让在AS中构建的tutorial-2-mixedprocessing OpenCV示例项目。

OpenCV位于项目的单独模块中,jniLibs中包含共享库(.so,.a文件),标头位于jni中。应用程序模块依赖于它。在构建时,请参阅下面的图片以获取示例代码和结果。

Android Studio screenshot

显然找不到标题? 我已经尝试在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 structure

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')
}

0 个答案:

没有答案