Android多模块项目Gradle配置耗时优化求助:配置耗时25秒
优化多模块Android项目Gradle配置耗时的实用方案
针对你63个Android Library模块的项目配置耗时卡在25秒的问题,结合你已经做的优化操作,我来给你拆解问题并给出针对性的解决思路:
首先先解释你疑惑的**"script application"**:这个阶段其实就是Gradle解析并执行所有模块(根目录+子模块)的build.gradle(或build.gradle.kts)脚本的过程,简单说就是Gradle读取并运行你写的所有构建配置代码的阶段。这部分耗时高,通常是因为重复配置太多、脚本里有冗余操作,或者没有利用好Gradle的复用机制。
接下来是具体的优化步骤:
1. 用约定插件(Convention Plugins)统一复用配置
这是多模块项目优化配置耗时最有效的手段之一:
- 把所有Android Library通用的配置(比如
compileSdk、defaultConfig、lintOptions、通用依赖如androidx.core:core-ktx等)抽成单独的约定插件,而不是在每个模块的build.gradle里重复写一遍。 - 每个子模块只需要一行代码
apply plugin: 'com.yourcompany.android.library'(或者Kotlin DSL的id("com.yourcompany.android.library"))就能复用所有通用配置,大幅减少每个模块脚本的执行量,直接降低"script application"阶段的耗时。
2. 清理脚本中的冗余操作
- 检查所有子模块的
build.gradle,移除不必要的插件、配置代码:比如有些模块如果没用到Kotlin,就别apply plugin: 'kotlin-android';移除所有注释掉但没删除的代码(哪怕是注释,Gradle也会解析,积少成多也会影响耗时)。 - 绝对避免在配置阶段做耗时操作:比如读取本地文件、遍历文件树、执行复杂计算逻辑等。这些操作应该放到Task的
doLast或doFirst闭包里,而不是直接写在脚本根节点(配置阶段会执行所有根节点代码)。
3. 充分利用Gradle配置缓存(Configuration Cache)
你之前用了--no-build-cache,但配置缓存是另一个独立的优化特性:
- 在
gradle.properties中添加org.gradle.configuration-cache=true开启配置缓存,Gradle会把配置阶段的结果缓存起来,后续构建直接复用缓存,配置耗时能降到几秒甚至1-2秒(第一次构建还是会正常耗时,但之后会大幅降低)。 - 注意:配置缓存对脚本写法有一定要求,比如不能在配置阶段访问Task的输出、不能动态生成Task名称等。你可以通过
./gradlew assembleDebug --scan生成的报告查看不兼容的地方,Gradle会给出具体的修复建议。
4. 精准优化configure-on-demand的效果
- 确认
--configure-on-demand真的在生效:在扫描报告的"Configuration"部分,查看被配置的模块列表,是不是有很多和你当前构建任务(temp:assembleDebug)无关的模块被意外配置了?如果是,检查模块间的依赖关系,避免不必要的跨模块依赖。 - 可以对比开启/关闭并行构建的配置耗时差异,并行构建主要影响执行阶段,配置阶段如果并行可能反而会有额外开销。
5. 升级Gradle和AGP版本
新版本的Gradle和Android Gradle Plugin对多模块配置做了大量优化:
- 比如Gradle 7.0+的配置缓存稳定性大幅提升,AGP 7.0+对Library模块的配置逻辑做了精简,能有效减少"script application"阶段的耗时。
- 升级后记得重新适配脚本,替换掉旧的废弃写法,这也能进一步提升配置效率。
6. 用扫描报告定位具体瓶颈
你已经生成了扫描报告,重点关注这几个部分:
- 查看"Configuration"阶段的时间线,找到耗时最长的几个模块的脚本执行记录,针对性优化这些模块的
build.gradle。 - 查看"Script Evaluation"部分,每个
build.gradle文件的执行耗时,找出拖慢整体的"罪魁祸首",比如某个模块的脚本里有大量自定义逻辑。
按照这些步骤优化后,你的配置耗时应该能接近甚至达到1-2秒的正常水平。
内容的提问来源于stack exchange,提问作者Majkeee




