Android Studio 1.3 gradle插件在源集中定义jni和jniLibs时返回错误

Android Studio 1.3 gradle插件在源集中定义jni和jniLibs时返回错误,android,android-studio,gradle,Android,Android Studio,Gradle,找不到属性jni和源集“main” apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 21 buildToolsVersion = "22.0.1" defaultConfig.with { applicationId = "com.example.native_activity"

找不到属性jni和源集“main”

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 21
        buildToolsVersion = "22.0.1"

        defaultConfig.with {
            applicationId = "com.example.native_activity"
            minSdkVersion.apiLevel = 9
            targetSdkVersion.apiLevel = 9
        }

        sourceSets.main {
            jni.srcDirs = [] // This prevents the auto generation of Android.mk
            jniLibs.srcDir = 'src/main/libs'
            // This is not necessary unless you have precompiled libraries in your project.
        }
    }
以下是stacktrace:

Caused by: org.gradle.model.internal.core.ModelRuleExecutionException: Exception thrown while executing model rule: model.android
    at org.gradle.model.internal.registry.DefaultModelRegistry.fireMutation(DefaultModelRegistry.java:485)
    at org.gradle.model.internal.registry.DefaultModelRegistry.access$1500(DefaultModelRegistry.java:45)
    at org.gradle.model.internal.registry.DefaultModelRegistry$RunModelAction.apply(DefaultModelRegistry.java:1464)
    at org.gradle.model.internal.registry.DefaultModelRegistry.transitionTo(DefaultModelRegistry.java:341)
    at org.gradle.model.internal.registry.DefaultModelRegistry.transition(DefaultModelRegistry.java:419)
    at org.gradle.model.internal.registry.DefaultModelRegistry.atStateOrMaybeLater(DefaultModelRegistry.java:183)
    at org.gradle.model.internal.registry.DefaultModelRegistry.atStateOrLater(DefaultModelRegistry.java:175)
    at org.gradle.execution.TaskNameResolver.selfClose(TaskNameResolver.java:101)
    at org.gradle.execution.TaskNameResolver.selfClosedTasksNode(TaskNameResolver.java:114)
    ... 60 more
Caused by: org.gradle.api.internal.MissingMethodException: Could not find method main() for arguments [build_f1cmjkxjjzysskbrs6852ixyj$_run_closure1_closure2_closure7@8c09fa7] on SourceSet container.

在过去的两个小时里,我疯狂地在谷歌上搜索…

你似乎在尝试使用grade实验插件

确保您的
渐变包装中有2.5级。属性

distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
在项目的
build.gradle
dependencies标记中

classpath 'com.android.tools.build:gradle-experimental:0.1.0'
与其猜测很多事情,不如让我将您引向《用户指南》,其中的文档详细解释了从标准插件到实验插件的迁移


试试这些修复方法。发布更多详细信息如果这些对您不起作用,我会尽力帮助您。:)

正如阿瓦尼什所说的——非常仔细地一步一步地阅读。要获得更多许可,请查看google提供的中的build.gradle文件

sourceSets.main{}
有不同的语法,应该在
android{}
块之外。在您的情况下,它应该如下所示:

model {

    android {
        //...
    }

    android.sources {
        main {
            jniLibs {
                source {
                    srcDirs 'libs'
                }
            }
        }
    }

}

就我而言,这与托奇科夫的回答完全相反:

此语法(使用jniLibs外部的android块)给了我一个错误:

android {

   compileSdkVersion 21
   buildToolsVersion "21.1.2"

   defaultConfig {
       applicationId "com.mycompany.myproject"
       minSdkVersion 17
       targetSdkVersion 21
       versionCode 1
       versionName "1.0"
   }
   buildTypes {
       release {
          minifyEnabled false
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }
   }
}

sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}
而这个语法-内置android block-修复了它:

android {

compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "com.mycompany.myproject"
    minSdkVersion 17
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}
}
以上是从我的实验性ndk项目中复制的,这对我很有用。
请参阅android.sources.main的
部分。

谢谢。我确实看了一眼。似乎我在做正确的事情的同时仍然犯了这些错误。明天我会再花更多的时间告诉你我的进度(或者没有进度)。2小时lol:)我花了3天时间将NDK和C库与Gradle集成。你解决了这个问题吗?这个垃圾应该可以让人们节省时间…:XT实验插件指南对解决我的错误非常有帮助。然后如何排除特定文件?srcDirs块必须包含在源{}块中!
apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"

        defaultConfig {
            applicationId "com.example.jeremy.test"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                proguardFiles.add(file('proguard-android.txt'))
            }
        }
        ndk {
            moduleName "hello-android-jni"
        }
    }

    android.sources.main {
        java.source.srcDirs = ["src/main/java", "/Users/jeremy/Repositories/hello/src/android/java"]
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}