【问题标题】:Android Studio+Experimental Gradle Plugin+NDK+OpenCV:showing error at opencv include statementAndroid Studio+Experimental Gradle Plugin+NDK+OpenCV:opencv include 语句显示错误
【发布时间】:2015-11-21 17:04:45
【问题描述】:

我正在将 opencv 库与我的项目集成。我已经使用实验性 gradle 插件成功配置了 NDK。但是 Opencv 出错了。这是我的 cpp 文件中显示的错误。

我的 build.gradle 是:

apply plugin: 'com.android.model.application'
model {
     android {
       compileSdkVersion = 23
       buildToolsVersion = "23.0.0"

       defaultConfig.with {
        applicationId = "com.legalplex.dharani.android"
        minSdkVersion.apiLevel = 14
        targetSdkVersion.apiLevel = 23

        buildConfigFields.with {
            create() {
                type = "int"
                name = "VALUE"
                value = "1"
            }
        }
    }
  }
  android.ndk {
    moduleName = "document_scanner"
     cppFlags += "-fno-rtti"
     cppFlags += "-fno-exceptions"
     ldLibs    = ["android", "log"]

    stl ="gnustl_shared"
   }
   android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
   }
   android.productFlavors {
    // for detailed abiFilter descriptions, refer to "Supported ABIs" @
    // https://developer.android.com/ndk/guides/abis.html#sa
    create("arm") {
        ndk.abiFilters += "armeabi"
    }
    create("arm7") {
        ndk.abiFilters += "armeabi-v7a"
    }
    create("arm8") {
        ndk.abiFilters += "arm64-v8a"
    }
    create("x86") {
        ndk.abiFilters += "x86"
    }
    create("x86-64") {
        ndk.abiFilters += "x86_64"
    }
    create("mips") {
        ndk.abiFilters += "mips"
    }
    create("mips-64") {
        ndk.abiFilters += "mips64"
    }
    // To include all cpu architectures, leaves abiFilters empty
    create("all")
    }
    }
    dependencies {
        compile 'com.android.support:support-v4:19.1.0'
       compile project(':openCVLibrary')
    }

为什么即使在我的 gradle 文件中添加了模块依赖项后,它在 opencv 中仍显示错误。请帮帮我。如何配置我的 build.gradle 文件来激活我们自己的 Android.mk。这是我的 Android.mk 文件:

  LOCAL_PATH := $(call my-dir)
  include $(CLEAR_VARS)
  include OpenCV-2.4.10-android-sdk\sdk\native\jni\OpenCV.mk
  OPENCV_INSTALL_MODULES := on
  LOCAL_MODULE := document_scanner
  LOCAL_SRC_FILES := jni_part.cpp
  LOCAL_C_INCLUDES := OpenCV-2.4.10-android-sdk\sdk\native\jni\include
  OPENCV_LIB_TYPE:=STATIC
  LOCAL_LDLIBS += -llog
  include $(BUILD_SHARED_LIBRARY)

【问题讨论】:

  • 你有没有想过这个问题?我现在正在做一个类似的项目,我也遇到了这个问题。
  • 不,我还没有找到解决方案。但据我所知,Android Studio 有实验性的 NDK 支持。可能这就是它无法识别 OpenCV 等第三方库的原因。

标签: android android-studio android-ndk android-gradle-plugin opencv4android


【解决方案1】:

您应该 a) 启用 ndk-build,b) 禁用 ndk 插件。下面的代码是为 Mac 调整的,在 Windows 上你需要ndk-build.cmd:

task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
    def ndkDir = android.ndkDirectory
    commandLine "$ndkDir/ndk-build"
}
buildNative.onlyIf {
    def ndkDir = android.ndkDirectory
    file("$ndkDir/ndk-build").exists()
}

task cleanNative(type: Exec, description: 'Clean JNI object files') {
    def ndkDir = android.ndkDirectory
    commandLine "$ndkDir/ndk-build", 'clean'
}
cleanNative.onlyIf {
    def ndkDir = android.ndkDirectory
    file("$ndkDir/ndk-build").exists()
}

clean.dependsOn 'cleanNative'

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn buildNative
}

defaultConfig.ndk {
    moduleName "pexeso-android-mobile"
}

tasks.all {
    task -> if (task.name.contains('compileDebugNdk') || task.name.contains('compileReleaseNdk')) task.enabled = false
}

UPDATE类似的方法适用于experimental插件,请参阅define LOCAL_SRC_FILES in ndk{} DSL

【讨论】:

  • 我应该把这个放在哪里?它显示错误:没有方法签名:org.gradle.model.dsl.internal.NonTransformedModelDslBacking.dependsOn() 适用于参数类型:(java.lang.String) 值:[cleanNative] 可能的解决方案:responsTo(java. lang.String) 打开文件
  • 我忘了说我使用的是'com.android.tools.build:gradle:1.2.3',而不是experimental插件。新的 DSL 尚未完成,请参阅 ph0b.com/new-android-studio-ndk-support
猜你喜欢
  • 1970-01-01
  • 2016-01-19
  • 2015-12-14
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
相关资源
最近更新 更多