配置缓存深度适配
源:配置缓存
Configuration Cache 通过跳过构建的“配置阶段”来提速。一旦开启,你的 Sync 速度和运行速度会提升 50% 以上。
核心限制分析
配置缓存要求 Task 在“执行阶段”不能访问 project 对象及其关联的 allprojects, rootProject 等。因为这些对象是配置阶段的产物,无法被序列化。
常见违规代码
kotlin
// 坑:在 Task action 中访问 project
doLast {
println(project.name)
}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)
}兼容性诊断
如果你不确定项目中的插件是否兼容配置缓存,运行:
bash
./gradlew assembleDebug --configuration-cacheGradle 会生成一份报告,明确指出哪一行代码访问了非法的对象。
配置强制开启
在 gradle.properties 中:
properties
org.gradle.configuration-cache=true
# 遇到不兼容的插件时报错,而不是跳过缓存
org.gradle.configuration-cache.problems=fail