当存在lintCheck依赖项时,Gradle构建工具4.1.0在Android Studio中无法同步

问题描述

我们有一个带有自定义棉绒检查功能的Android多模块项目,并且我们一直在尝试使用Android gradle构建工具 4.1.0 ,但是Android Studio 4.1.0 gradle同步一直失败。 / p>

假设我们有两个模块(加上一些不相关的“库”模块):

  • app(主应用程序模块)
  • lintchecks自定义棉绒规则)

app使用lintchecks中的自定义app/build.gradle模块:

  lintChecks project(":lintchecks")

现在,假设有一些自定义插件(例如,在buildSrc中)或使用subprojectstasks.whenTaskAdded的组合进行配置。 例如,在./build.gradle中:

subprojects {
   tasks.whenTaskAdded { 
     // content not important
   }
}

lintcheck配置中没有什么特别的。例如在lintchecks/build.gradle中:

apply plugin: 'kotlin'

dependencies {
    compileOnly "com.android.tools.lint:lint-api:27.1.0"
    compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    testImplementation "com.android.tools.lint:lint:27.1.0"
    testImplementation "com.android.tools.lint:lint-tests:27.1.0"
    testImplementation "com.android.tools:testutils:27.1.0"
}

jar {
    manifest {
        attributes("Lint-Registry-v2": "com.company.lintrules.IssueRegistry")
    }
}

Android Studio同步一直失败,并显示类似以下错误

A problem occurred evaluating project ':lintrules'.
> Failed to apply plugin 'kotlin'.
   > Gradle#projectsEvaluated(Action) on build 'MyCompanyBuild' cannot be executed in the current context.

摘要

问题似乎出在 Android Studio 4.1.0 +构建gradle工具 4.1.0 + lintCheck() 的结合上+ tasks.whenTaskAdded {}

我尝试过的事情

    lintrules/build.xml中的
  • 个不同的插件,例如maven-publishorg.jetbrains.kotlin.jvm,同样的错误结果
  • 声明插件的不同方式,例如plugins { id (...) }apply plugin: '...'错误结果相同
  • 旧版本的lint依赖项
  • 删除lintCheck删除tasks.whenTaskAdded或降级为gradle构建工具4.0.1,这些都会使它再次工作
  • 在Android Studio外部的终端上运行任何命令,都可以正常工作,问题似乎仅在A.S.同步操作。

问题

还有其他人遇到同样的问题吗?

解决方法

此问题已在故障单https://issuetracker.google.com/issues/170656529下报告

目前解决此问题的方法是跳过在idea.active系统属性的IDE测试中引起问题的逻辑:

if(System.getProperty("idea.active") != "true"){
  tasks.whenTaskAdded {
    (...)
  }
}

(感谢杰里找到机票)