Skip to content

配置缓存深度适配

源:配置缓存

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-cache

Gradle 会生成一份报告,明确指出哪一行代码访问了非法的对象。

4. 强制开启

gradle.properties 中:

properties
org.gradle.configuration-cache=true
# 遇到不兼容的插件时报错,而不是跳过缓存
org.gradle.configuration-cache.problems=fail