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

Lau*_*ent 7 android gradle android-studio

找不到属性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.
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

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.
Run Code Online (Sandbox Code Playgroud)

在过去的两个小时里,我用疯狂的Google搜索...

toc*_*kov 9

作为Awanish说-读实验Plugin用户指南步步非常小心.要获得更多间隙,请检查google提供的ndk-samples中的build.gradle文件.

sourceSets.main { }有不同的语法,应该在android { }块之外.在你的情况下,它应该看起来像这样:

model {

    android {
        //...
    }

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

}
Run Code Online (Sandbox Code Playgroud)


Flo*_*011 8

在我的情况下,它与tochkov答案完全相反:

这个语法 - android块之外的jniLibs - 给了我一个错误:

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']
    }
}
Run Code Online (Sandbox Code Playgroud)

这个语法 - 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']
    }
}
}
Run Code Online (Sandbox Code Playgroud)


小智 1

看来您正在尝试使用等级实验插件!

确保您的以下成绩达到 2.5 级gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
Run Code Online (Sandbox Code Playgroud)

这在你的项目的build.gradle依赖标签中

classpath 'com.android.tools.build:gradle-experimental:0.1.0'
Run Code Online (Sandbox Code Playgroud)

我不会猜测很多事情,而是将您重定向到用户指南,其中文档详细解释了从标准插件到实验性插件的迁移。看看这里!

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