1. 为什么Gradle构建缓存能带来50%的速度提升上周在给一个Android项目做构建优化时我把Gradle构建缓存配置完整走了一遍结果让clean build时间从8分钟降到了4分钟。这背后其实是一套非常精妙的缓存机制在发挥作用。Gradle构建缓存本质上是一个本地或远程的存储系统它会缓存任务输出比如.class文件、资源文件等。当相同的输入再次出现时Gradle会直接复用缓存结果而不是重新执行任务。这里说的相同输入包括任务类型和实现类输入文件和内容类路径和依赖项任务配置参数举个例子当你修改了一个Java源文件Gradle只会重新编译这个文件及其依赖项其他未修改的部分会直接从缓存加载。这种细粒度的缓存策略是构建速度提升的关键。注意构建缓存不同于Gradle的增量构建。增量构建是在单次构建中避免重复工作而构建缓存可以跨不同构建会话比如CI服务器和开发机之间复用结果。2. 构建缓存配置全攻略2.1 启用基础缓存配置在项目的gradle.properties中添加以下配置# 启用构建缓存 org.gradle.cachingtrue # 本地缓存目录默认在~/.gradle/caches org.gradle.cache.local.directory/path/to/custom/cache # 控制本地缓存大小默认5GB org.gradle.cache.local.maxsize6144m对于团队协作项目建议配置远程缓存。以HTTP缓存为例# 远程缓存配置 org.gradle.cache.remote.urlhttps://your-cache-server/gradle-cache org.gradle.cache.remote.usernameyour-username org.gradle.cache.remote.passwordyour-password2.2 缓存兼容性配置要让缓存真正发挥作用需要确保任务输出是可缓存的。在自定义任务中tasks.register(myTask) { // 声明任务输入输出 inputs.file(src/main/resources/config.json) outputs.dir(build/generated) // 明确声明任务可缓存 outputs.cacheIf { true } doLast { // 任务实现... } }关键配置点所有输入必须通过inputs声明所有输出必须通过outputs声明使用cacheIf控制缓存条件2.3 缓存排除策略有些任务不适合缓存比如依赖当前时间的任务tasks.named(generateVersion) { outputs.cacheIf { false } // 禁用缓存 }典型需要排除缓存的场景包含随机数的输出依赖系统时间的任务涉及安全凭证的操作3. 高级优化技巧3.1 依赖项缓存优化依赖项解析是构建中的耗时大户。在settings.gradle中添加dependencyResolutionManagement { // 启用依赖缓存 cachedDependencies { // 保留最近10次构建的依赖 keepInCacheForDays 10 } }同时建议配置镜像仓库加速下载repositories { maven { url https://maven.aliyun.com/repository/public } }3.2 并行构建配置结合并行构建可以进一步提升速度# gradle.properties org.gradle.paralleltrue org.gradle.workers.max4 # 通常设置为CPU核心数3.3 配置文件优化调整JVM参数减少GC开销org.gradle.jvmargs-Xmx4g -XX:MaxMetaspaceSize1g -XX:HeapDumpOnOutOfMemoryError4. 实测效果对比在我的项目包含1200个Java类中的测试数据场景构建时间提升幅度无缓存8m12s-仅本地缓存5m45s30%本地远程缓存4m03s50%缓存并行3m22s59%5. 常见问题排查5.1 缓存未命中问题如果发现缓存命中率低可以运行构建时添加--info参数查看缓存决策./gradlew build --info检查任务是否正确定义了inputs/outputs确保没有使用绝对路径等不稳定的输入5.2 缓存一致性维护当遇到奇怪的构建问题时可以# 清理缓存重新构建 ./gradlew clean build --rerun-tasks # 查看缓存内容 tree ~/.gradle/caches/build-cache-15.3 性能调优记录建议在CI流程中添加构建扫描./gradlew build --scan这会生成详细的构建报告包含缓存命中率、任务耗时等关键指标。6. 个人实践心得经过多个项目的实践我发现这些配置对构建速度影响最大远程缓存团队共享缓存能让新成员的第一构建从40分钟降到10分钟依赖缓存特别是Android项目的com.android.tools.build:gradle这类大依赖JVM调优适当增加内存能显著减少GC停顿有个容易忽略的点是IDE集成。在Android Studio中记得检查设置Build, Execution, Deployment Gradle 勾选Enable Gradle caching取消勾选Only sync active variant以充分利用缓存最后提醒缓存配置需要随项目迭代持续优化。每次添加新插件或任务时都应该考虑其对缓存的影响。我在一个Kotlin多平台项目中就曾因为忘记配置缓存导致构建时间从3分钟回退到7分钟。
阅读完成 · 觉得有帮助?