Skip to content

配置缓存深度适配

源:配置缓存

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

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

配置强制开启

gradle.properties 中:

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