升级构建 gradle 导致 Gradle 的新变体感知依赖管理错​​误

new*_*zer 5 android dependency-management build.gradle

我有一个 Android 项目,它在 build gradle 2.3.3 中运行良好,当我使用 build gradle 3.0.1 时,我遇到了一些构建错误。这是错误的build.gradle,它的项目名称是A。

apply plugin: 'com.android.library'
apply from: '../Localization/localize.gradle'
apply plugin: 'maven'
......
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'

defaultConfig {
    minSdkVersion 19
    targetSdkVersion 26
    versionCode buildVersionCode
    versionName buildVersionNumber

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    externalNativeBuild {
        cmake {
            cppFlags "-std=c++11"
        }
    }
    ndk{
        // Specifies the ABI configurations of your native
        // libraries Gradle should build and package with your APK.
        /*abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
        'arm64-v8a'*/
        abiFilters 'x86','armeabi-v7a'
    }
    testOptions {
        unitTests.returnDefaultValues = true
    }
    consumerProguardFiles 'proguard-rules.pro'

    // Set build time-stamp and version number
    buildConfigField  "String", "sProjectBuildTime", "\"${buildTimeStamp}\"";
    buildConfigField  "String", "sProjectVersionNumber", "\"${buildVersionNumber}\"";

    ......
}
Run Code Online (Sandbox Code Playgroud)

它适用于 localize.gradle,这是 localize.gradle 内容

// import legacy ANT tasks: http://www.javacodegeeks.com/2012/08/using
gradle-to-bootstrap-your-legacy.html for XSLT based localization
ant.projectName = 'A'
ant.importBuild '../../Tools/Localization/localize.xml'
// expose legacy ANT task as GradleBuild task
task gradleLocalize(type: GradleBuild) { GradleBuild antBuild ->
    antBuild.buildFile = 'build.gradle'
    antBuild.tasks = ['ant2gradleLocalize']
}

// automatically run localization GradleBuild task when the AndroidManifest gets checked during the build
tasks.whenTaskAdded { task ->
    if (task.name.startsWith('check')) {
        if (task.name.endsWith('DebugManifest') || 
task.name.endsWith('ReleaseManifest')) {
            task.dependsOn gradleLocalize
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误信息是评估项目':A'时出现问题。

无法应用插件 [id 'com.android.library'] 由于 Gradle 新的变体感知依赖管理的限制,在不同的类加载器中加载 Android Gradle 插件会导致构建错误。当子项目中包含 Android Gradle 插件的构建脚本类路径或复合构建中包含的项目设置不同时,可能会发生这种情况。要解决此问题,请将 Android Gradle 插件仅添加到顶级 build.gradle 文件的 buildscript 类路径。在复合构建的情况下,还要确保包含 Android Gradle 插件的构建脚本类路径在主项目和包含的项目中是相同的。如果您使用的 Gradle 版本已经解决了该问题,您可以通过设置 android. enableBuildScriptClasspathCheck=false 在 gradle.properties 文件中。要了解有关此问题的更多信息,请访问https://d.android.com/r/tools/buildscript-classpath-check.html

我在整个项目中发现插件名称 com.android.library 它只出现一次,我猜也许项目 A 的 build.gradle 和 localize.grandle 有循环依赖,有人可以帮忙吗?我被这个阻塞了很长时间。谢谢!