配置阶段优化核心是切断重复解析与隐式耦合:禁用已废弃的 configure on demand;启用配置缓存(configuration-cache)可将中型项目配置耗时从25秒降至1.2秒;迁移 buildSrc 逻辑至 version catalog 和预编译插件;简化 settings.gradle 中动态逻辑。

配置阶段耗时高,本质是 Gradle 每次构建都要重新解析所有 build.gradle(或 build.gradle.kts)脚本、执行 plugins 块、遍历 subprojects、计算依赖传递图——这些操作在大型项目里极易失控。真正有效的压缩手段,不是“少写几行”,而是切断重复解析和隐式耦合。
关闭 configure on demand(但仅限多模块项目)
这个选项看似能跳过未参与构建的模块配置,实际在 Android 项目中副作用远大于收益:
-
org.gradle.configureondemand=true会破坏 AGP(Android Gradle Plugin)对资源合并、R 类生成等环节的依赖推导,导致:app:mergeDebugResources失败或R类不全 - 它无法识别
buildSrc或settings.gradle中的动态逻辑,反而让配置阶段更难预测 - Gradle 7.4+ 已默认禁用该功能;AGP 8.0+ 完全移除兼容支持
如果你的 gradle.properties 里还留着这行,直接删掉。它不会提速,只会埋坑。
启用配置缓存(configuration-cache)
这是目前压缩配置阶段最有效、最稳定的手段。它把整个项目的配置逻辑(包括插件应用、任务创建、属性赋值)序列化为二进制快照,后续构建直接复用,跳过脚本重解析。
- 必须配合
org.gradle.configuration-cache=true和org.gradle.configuration-cache-problems=warn(Kotlin DSL 项目尤其需要) - 常见不兼容点:
project.afterEvaluate、gradle.taskGraph.whenReady、硬编码路径拼接(如"$rootDir/src/main")、反射调用Project内部方法 - 报错提示里带
Configuration cache is not supported的,不是配置错了,而是某处用了禁止的 API —— 查日志定位具体 task 或 plugin 即可
一个中型 Android 项目开启后,配置阶段从 25 秒降至 1.2 秒是常态。
剥离 buildSrc 与版本管理逻辑
很多团队把所有依赖版本、插件声明、公共函数塞进 buildSrc,结果每次改一行 Kotlin 脚本,整个 buildSrc 编译 + 重加载,拖慢全部模块配置。
- 把纯数据类(如
DepVersions)抽成gradle/libs.versions.toml(Version Catalog),它被 Gradle 原生缓存,且无需编译 - 把
buildSrc中的 DSL 扩展函数拆到独立的 precompiled script plugins(如convention-plugins模块),并确保其build.gradle极简(只 apply 插件、设 group) - 避免在
buildSrc里读取System.getenv()或File.exists()—— 这些会使配置缓存失效
你改的是业务代码,不该触发构建脚本的重新编译。
检查 settings.gradle 中的动态逻辑
settings.gradle 是配置阶段的起点,但它常被当成“初始化脚本”滥用:
- 用
include(":feature:login")静态声明模块,别用fileTree("modules").each { include(it.name) }—— 后者每次构建都扫描磁盘、触发文件变更监听 - 避免在
pluginManagement块里做条件判断(如根据System.getProperty("env")切换仓库),这会让 Gradle 放弃缓存整个settings解析结果 - 如果用了
dependencyResolutionManagement,确保repositories列表固定且顺序合理(Maven Central 在前,私有仓库在后)
配置阶段没有“运行时”,只有“确定性”。任何不确定输入,都会让它退化为每次都重算。
配置阶段优化的边界很清晰:它不解决 kapt、Dexing 或资源编译慢的问题,只负责让 Gradle 少做一遍“思考”。一旦你看到 profile 报告里 Configuration 阶段占比超过 25%,优先盯住 settings.gradle 和 buildSrc —— 这两个地方藏了最多“以为自己在提速,其实正在拖垮所有人”的配置。











