Java 在Android Studio中使用OpenCV本机代码 我在C++中创建了OpenCV项目,并希望在Android设备上运行它。我试图将我的android项目设置为运行本机代码,但没有成功。我目前面临以下错误:

Java 在Android Studio中使用OpenCV本机代码 我在C++中创建了OpenCV项目,并希望在Android设备上运行它。我试图将我的android项目设置为运行本机代码,但没有成功。我目前面临以下错误:,java,android,c++,opencv,android-studio,Java,Android,C++,Opencv,Android Studio,错误:(23,0)找不到Gradle DSL方法:“compile()” 我使用以下github示例,以opencv为基础进行本机android开发: 到目前为止,为了让gradle正确同步,我已经做了以下工作: 已更新项目属性,如下所示: 将{OpenCV_DIR}\sdk\java作为模块导入,并将其作为模块依赖项添加到项目结构设置中 这是opencv示例master\build.gradle: buildscript { repositories { jcenter

错误:(23,0)找不到Gradle DSL方法:“compile()”

我使用以下github示例,以opencv为基础进行本机android开发:

到目前为止,为了让gradle正确同步,我已经做了以下工作:

已更新项目属性,如下所示:

将{OpenCV_DIR}\sdk\java作为模块导入,并将其作为模块依赖项添加到项目结构设置中

这是opencv示例master\build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.7.0-beta1'

    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

dependencies {
    compile project(':OpenCVLib')
}
apply plugin: 'com.android.model.application'

model {
android {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.2"

    defaultConfig.with {
        applicationId = "org.honorato.opencvsample"
        minSdkVersion.apiLevel = 15
        targetSdkVersion.apiLevel = 23
        versionCode = 1
        versionName = "1.0"
    }

    ndk {
        moduleName = "native"
        cppFlags.add("-I${file(getOpenCVDir())}".toString())
        cppFlags.add("-frtti")
        cppFlags.add("-fexceptions")
        ldLibs.addAll(["log", "opencv_java3"])
        stl    = "gnustl_static"
    }
}

android.buildTypes {
    release {
        // minifyEnabled = false
        // proguardFiles = getDefaultProguardFile('proguard-android.txt'), '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.add("armeabi")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString())
    }
    create("arm7") {
        ndk.abiFilters.add("armeabi-v7a")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
    }
    create("arm8") {
        ndk.abiFilters.add("arm64-v8a")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString())
    }
  }
}

def getOpenCVDir() {
   Properties properties = new Properties()
   properties.load(new File(rootDir.absolutePath +     "/local.properties").newDataInputStream())
   def externalModuleDir = properties.getProperty('opencv.dir', null)
   if (externalModuleDir == null) {
       throw new GradleException(
               "OpenCV location not found. Define location with opencv.dir in the local.properties file!")
   }
   return externalModuleDir
 }

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.android.support:appcompat-v7:23.1.1'
   compile project(':openCVLibrary300')
}
apply plugin: 'com.android.library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':{DIR}:workspace:appcompat_v7')
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }    

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
以下是项目的build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.7.0-beta1'

    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

dependencies {
    compile project(':OpenCVLib')
}
apply plugin: 'com.android.model.application'

model {
android {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.2"

    defaultConfig.with {
        applicationId = "org.honorato.opencvsample"
        minSdkVersion.apiLevel = 15
        targetSdkVersion.apiLevel = 23
        versionCode = 1
        versionName = "1.0"
    }

    ndk {
        moduleName = "native"
        cppFlags.add("-I${file(getOpenCVDir())}".toString())
        cppFlags.add("-frtti")
        cppFlags.add("-fexceptions")
        ldLibs.addAll(["log", "opencv_java3"])
        stl    = "gnustl_static"
    }
}

android.buildTypes {
    release {
        // minifyEnabled = false
        // proguardFiles = getDefaultProguardFile('proguard-android.txt'), '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.add("armeabi")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString())
    }
    create("arm7") {
        ndk.abiFilters.add("armeabi-v7a")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
    }
    create("arm8") {
        ndk.abiFilters.add("arm64-v8a")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString())
    }
  }
}

def getOpenCVDir() {
   Properties properties = new Properties()
   properties.load(new File(rootDir.absolutePath +     "/local.properties").newDataInputStream())
   def externalModuleDir = properties.getProperty('opencv.dir', null)
   if (externalModuleDir == null) {
       throw new GradleException(
               "OpenCV location not found. Define location with opencv.dir in the local.properties file!")
   }
   return externalModuleDir
 }

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.android.support:appcompat-v7:23.1.1'
   compile project(':openCVLibrary300')
}
apply plugin: 'com.android.library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':{DIR}:workspace:appcompat_v7')
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }    

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
最后,opencv库的build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.7.0-beta1'

    }
}
allprojects {
    repositories {
        jcenter()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

dependencies {
    compile project(':OpenCVLib')
}
apply plugin: 'com.android.model.application'

model {
android {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.2"

    defaultConfig.with {
        applicationId = "org.honorato.opencvsample"
        minSdkVersion.apiLevel = 15
        targetSdkVersion.apiLevel = 23
        versionCode = 1
        versionName = "1.0"
    }

    ndk {
        moduleName = "native"
        cppFlags.add("-I${file(getOpenCVDir())}".toString())
        cppFlags.add("-frtti")
        cppFlags.add("-fexceptions")
        ldLibs.addAll(["log", "opencv_java3"])
        stl    = "gnustl_static"
    }
}

android.buildTypes {
    release {
        // minifyEnabled = false
        // proguardFiles = getDefaultProguardFile('proguard-android.txt'), '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.add("armeabi")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi')}".toString())
    }
    create("arm7") {
        ndk.abiFilters.add("armeabi-v7a")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/armeabi-v7a')}".toString())
    }
    create("arm8") {
        ndk.abiFilters.add("arm64-v8a")
        ndk.ldFlags.add("-L${file('src/main/jniLibs/arm64-v8a')}".toString())
    }
  }
}

def getOpenCVDir() {
   Properties properties = new Properties()
   properties.load(new File(rootDir.absolutePath +     "/local.properties").newDataInputStream())
   def externalModuleDir = properties.getProperty('opencv.dir', null)
   if (externalModuleDir == null) {
       throw new GradleException(
               "OpenCV location not found. Define location with opencv.dir in the local.properties file!")
   }
   return externalModuleDir
 }

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   compile 'com.android.support:appcompat-v7:23.1.1'
   compile project(':openCVLibrary300')
}
apply plugin: 'com.android.library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':{DIR}:workspace:appcompat_v7')
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }    

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
apply插件:“com.android.library”
依赖关系{
编译文件树(目录:“libs”,包括:“*.jar”)
编译项目(':{DIR}:workspace:appcompat_v7')
}
安卓{
编译DK23版
buildToolsVersion“23.0.2”
源集{
主要{
manifest.src文件“AndroidManifest.xml”
java.srcDirs=['src']
resources.srcDirs=['src']
aidl.srcDirs=['src']
renderscript.srcDirs=['src']
res.srcDirs=['res']
assets.srcDirs=['assets']
}    
//将测试移动到tests/java、tests/res等。。。
instrumentTest.setRoot('tests'))
//将生成类型移动到生成类型/
//例如,build-types/debug/java、build-types/debug/AndroidManifest.xml。。。
//这会将它们移出src/…下的默认位置,这将
//与主源集正在使用的src/冲突。
//应同时添加新的构建类型或产品风格
//通过类似的定制。
setRoot('build-types/debug')
setRoot('build-types/release')
}
}

如果有人能帮助我解决这个问题,以及如何使用opencv开始本机android开发,我将不胜感激

您的问题可能来自您的依赖标志:

 compile project(':openCVLibrary300')
正如您使用gradle.0.7.0 alpha定义项目一样,很可能 您的opencv gradle文件是从gradle稳定版2.8或2.10编译而来的

梯度0.7.0

apply plugin: 'com.android.model.application'
格拉德尔2.10

apply plugin: 'com.android.library'
因此,您的opencv gradle文件可能没有正确定义

所以你有两个选择

如果要在本机模式下调试应用程序,请更改opencv gradle文件
或将代码更改为gradle 2.10

我对android编程相当陌生。您能告诉我如何将gradle文件更改为0.7.0吗?我假设行“classpath'com.android.tools.build:gradle-experimental:0.7.0-beta1”意味着gradle版本0.7.0被用于编译项目和所有模块。