配置缓存深度适配
源:配置缓存
Configuration Cache 通过跳过构建的“配置阶段”来提速。一旦开启,你的 Sync 速度和运行速度会提升 50% 以上。
1. 为什么它很难适配?
配置缓存要求 Task 在“执行阶段”不能访问 project 对象及其关联的 allprojects, rootProject 等。因为这些对象是配置阶段的产物,无法被序列化。
常见违规代码
kotlin
// 坑:在 Task action 中访问 project
doLast {
println(project.name)
}2. 专家级修复方案:Lazy API
不要直接引用 project,而是通过 Provider 传入。
kotlin
abstract class MyTask : DefaultTask() {
@get:Input
abstract val projectName: Property<String>
@TaskAction
fun action() {
println(projectName.get()) // 安全
}
}
// 在配置时传入
tasks.register<MyTask>("myTask") {
projectName.set(project.name)
}3. 检查兼容性
如果你不确定项目中的插件是否兼容配置缓存,运行:
bash
./gradlew assembleDebug --configuration-cacheGradle 会生成一份报告,明确指出哪一行代码访问了非法的对象。
4. 强制开启
在 gradle.properties 中:
properties
org.gradle.configuration-cache=true
# 遇到不兼容的插件时报错,而不是跳过缓存
org.gradle.configuration-cache.problems=fail