gdr*_*mer 6 android lint gradle android-studio-4.1
我们有一个带有自定义 lint 检查的 Android 多模块项目,我们一直在尝试迁移到 Android gradle 构建工具4.1.0,但 Android Studio 4.1.0 gradle 同步一直失败。
假设我们有两个模块(加上一些不相关的“库”模块):
app (主应用模块)lintchecks (自定义 lint 规则)app使用自定义lintchecks模块,在app/build.gradle:
lintChecks project(":lintchecks")
Run Code Online (Sandbox Code Playgroud)
现在,假设有一些自定义插件(例如,在buildSrc使用的组合)或配置subprojects和tasks.whenTaskAdded。例如,在./build.gradle:
subprojects {
tasks.whenTaskAdded {
// content not important
}
}
Run Code Online (Sandbox Code Playgroud)
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")
}
}
Run Code Online (Sandbox Code Playgroud)
它一直在 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.
Run Code Online (Sandbox Code Playgroud)
似乎问题是Android Studio 4.1.0 + build gradle tools 4.1.0 + lintCheck()+ 的组合tasks.whenTaskAdded {}。
lintrules/build.xml,比如maven-publish,org.jetbrains.kotlin.jvm,相同的错误结果plugins { id (...) }vs apply plugin: '...',相同的错误结果lintCheck,或删除tasks.whenTaskAdded,或降级到 gradle 构建工具4.0.1,其中任何一个都可以使其再次工作其他人还有相同的疑问么?
此问题已在票证下报告https://issuetracker.google.com/issues/170656529
目前解决此问题的方法是跳过导致 IDEidea.active系统属性测试出现问题的逻辑:
if(System.getProperty("idea.active") != "true"){
tasks.whenTaskAdded {
(...)
}
}
Run Code Online (Sandbox Code Playgroud)
(感谢Jerry找到票)
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |