问题描述
我们有一个带有自定义棉绒检查功能的Android多模块项目,并且我们一直在尝试使用Android gradle构建工具 4.1.0 ,但是Android Studio 4.1.0 gradle同步一直失败。 / p>
假设我们有两个模块(加上一些不相关的“库”模块):
-
app
(主应用程序模块) -
lintchecks
(自定义棉绒规则)
app
使用lintchecks
中的自定义app/build.gradle
模块:
lintChecks project(":lintchecks")
现在,假设有一些自定义插件(例如,在buildSrc
中)或使用subprojects
和tasks.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 {}
。
我尝试过的事情
- 个不同的插件,例如
maven-publish
,org.jetbrains.kotlin.jvm
,同样的错误结果 - 声明插件的不同方式,例如
plugins { id (...) }
与apply plugin: '...'
,错误结果相同 - 旧版本的lint依赖项
- 删除
lintCheck
或删除tasks.whenTaskAdded
或降级为gradle构建工具4.0.1
,这些都会使它再次工作 - 在Android Studio外部的终端上运行任何命令,都可以正常工作,问题似乎仅在A.S.同步操作。
lintrules/build.xml
中的问题
还有其他人遇到同样的问题吗?
解决方法
此问题已在故障单https://issuetracker.google.com/issues/170656529下报告
目前解决此问题的方法是跳过在idea.active
系统属性的IDE测试中引起问题的逻辑:
if(System.getProperty("idea.active") != "true"){
tasks.whenTaskAdded {
(...)
}
}
(感谢杰里找到机票)