You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CircleCI 2.0上处理Gradle缓存?Android构建缓存方案失效

解决Android Gradle依赖缓存失效的问题

你的缓存配置失效,大概率是因为缓存Key覆盖的配置文件不全,以及缓存路径不够精准——这是Gradle缓存在CI环境里常见的坑,我来帮你一步步修正:

1. 扩展缓存Key的校验范围

当前的Key只用到了android/build.gradle和android/app/build.gradle的校验和,但影响Gradle依赖解析的文件远不止这些:

  • gradle/wrapper/gradle-wrapper.properties:Gradle版本变化会直接改变缓存结构,旧版本的缓存和新版本不兼容
  • android/settings.gradle:如果项目添加/移除模块、调整依赖仓库,这个文件的变化会影响依赖下载
  • android/gradle.properties:依赖代理、仓库配置、JVM参数等都会影响依赖获取逻辑
  • 其他模块的build.gradle(如果有多个模块的话)

把这些文件都加入缓存Key的校验,确保任何影响依赖的配置变化都会触发新的缓存:

restore_cache:
  key: android-build-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }}-{{ checksum "android/settings.gradle" }}-{{ checksum "android/gradle.properties" }}
save_cache:
  paths:
    - ~/.gradle/caches
    - ~/.gradle/wrapper
  key: android-build-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }}-{{ checksum "android/settings.gradle" }}-{{ checksum "android/gradle.properties" }}

2. 缩小缓存路径范围

原来的~/.gradle包含了很多不需要缓存的内容:比如构建输出、Gradle守护进程日志、临时文件等。只缓存caches(依赖缓存)和wrapper(Gradle安装包)两个目录,既能减少缓存体积,又能避免无关文件干扰缓存有效性。

3. 排查动态依赖的影响

如果你的项目里用了动态版本依赖(比如implementation 'com.android.tools.build:gradle:7.+'),即使缓存了依赖,Gradle每次构建都会去远程仓库检查更新,导致缓存失效。建议把所有依赖版本固定为具体号(比如7.4.2),这样缓存能稳定命中。

4. 验证缓存命中情况

在CI运行时查看restore_cache步骤的日志:

  • 如果显示“Cache hit”,说明配置生效;
  • 如果显示“Cache miss”,手动计算上述文件的校验和,对比CI生成的缓存Key,看看是不是有文件被修改但没加入Key里。

内容的提问来源于stack exchange,提问作者Sibelius Seraphini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:23:51