安卓Gradle Build 往往会耗费大量时间,本文介绍如何通过简单配置利用新版Gradle的缓存特性提高速度。
省流:gradle.properties 添加以下配置
# Use caching to speed up build. Please clear cache in case it's corrupted
# The org.gradle.caching set the build cache which locates
# at ~/.gradle/caches/build-cache-1 by default
org.gradle.configuration-cache=true
org.gradle.caching=true
[本文默认Android Studio, Android Gradle Plugin, Gradle 均为较新版]
1.Gradle默认支持 Incremental Build Cache
目前Gradle默认支持增量构建缓存(Incremental Build Cache),即第二次构建时如果有Task的输入不变,且Gradle判断相同输入一定有相同输出时,直接使用上一次构建时的缓存,在Android Studio Build界面输出中可见任务后面 UP-TO-DATE 标记。
2.开启Gradle Build Cache
编辑
Build Cache 工作原理 (Task指相同输入必得相同输出的任务,安卓构建任务一般符合):
对每次输入,计算输入Hash, 查找是否有相同hash的缓存,有则直接跳过此任务,使用缓存。在Build界面输出会在任务名后面添加 FROM-CACHE 标记。
Build Cache与默认的Incremental Cache 不同之处在于它能缓存同一Task的多个不同输入的结果,而Incremental Cache只保留上一次的缓存。例如当修改了一部分代码并Build,接着又回滚成旧代码(小幅修改测试情景),Build Cache 就能发挥作用;此外,执行完clean任务后,项目build目录被清空,无法使用Incremental Cache, 此时Build Cache可复用(例如,Android Studio 突然Corrupt, 需要清理缓存并重启)。
开启配置:gradle.properties 中添加
org.gradle.caching=true
(命令行添加 --build-cache,不过安卓一般很少用命令行构建)
3.开启Confuguration Cache
编辑
Gradle 在开始构建时,会先进行配置,解析配置文件,分析依赖等。在安卓中往往发生在Gradle Sync 时。Configuration Cahe 是针对配置阶段的缓存,当项目依赖较多,配置经常变动时尤其有用。此外,Android Studio 的Build Analyzer 也可能在你的项目配置较慢时提出warning 和添加configuration cache 的建议。
开启配置:gradle.properties 中添加
org.gradle.configuration-cache=true
(注意:Configuration Cache 可能与某些第三方项目插件不兼容(例如某些字节码插桩插件),建议使用三方插件的项目进行实际测试)
4. 可选配置项(Optional)
Build Cache 默认缓存路径是 * ~/.gradle/caches/build-cache-1* (这里~指当前用户目录,具体可查看Android Studio Settings>Build, Execution, Deployment>Build Tools>Gradle界面的Gradle user home路径)
编辑
Build Cache 默认缓存有效期为7天,有效期前的所有缓存将会被清理。如果需要调整缓存路径和有效期,可在settings.gradle.kts 中配置
buildCache {
local {
directory = File(rootDir, "build-cache")
// set how many days you want to keep the caches
// not recommended as it's deprecated
removeUnusedEntriesAfterDays = 30
}
}
其中有效期的配置推荐在gradle user home 目录中进行全局配置(在settings.gradle.kts中配置有效期的做法已废弃):创建 ~/.gradle/init.gradle.kts文件并添加配置
beforeSettings {
caches {
buildCache.setRemoveUnusedEntriesAfterDays(30)
}
}
(Android Studio 可能会弹出提示 "init.gradle.kts 未链接项目",可选择忽略,这是全局配置不需要链接项目)
参考资料:
Gradle Configuration Cache 官方文档
DPE University | Gradle 官方培训课程(免费)
Build Cache 有效期 相关文档:
Upgrading your build from Gradle 8.x to the latest | directory build cache retention deprecated
Gradle-managed Directories | gradle user home cache clean up