缓存目录结构识别:全局缓存、项目缓存、构建缓存、Transform 缓存

适用场景

  • AGP 版本升级前,需要识别各类型缓存目录的位置与内容,以制定缓存清理或迁移策略。
  • 构建异常(如 Transform 冲突、资源链接失败)时,排查缓存目录结构有助于定位问题。
  • CI/CD 环境初始化或缓存策略调整时,需区分全局缓存与项目缓存。

前置条件

  • 确认当前 AGP 版本号(可在 build.gradle 或 project/build.gradle.kts 中查看 com.android.tools.build:gradle 依赖)。
  • 拥有 Gradle 用户目录(一般为 ~/.gradle)及项目根目录的读权限。
  • 了解 Gradle 缓存基本概念:全局缓存、项目缓存、构建缓存、Transform 缓存的分层关系。

操作步骤

  1. 定位全局缓存目录
    默认路径:~/.gradle/caches。进入后观察 modules-2、transforms-* 等子目录。
  2. 定位项目缓存目录
    项目根目录下的 .gradle 文件夹(例如 MyApp/.gradle)。内部含 buildOutputCleanup、caches 等子目录。
  3. 定位构建缓存目录
    由 build-cache 配置决定,默认位置:项目根目录下的 build-cache 文件夹,或全局 ~/.gradle/caches/build-cache-*。可通过 gradle.properties 中的 org.gradle.caching 开启。
  4. 定位 Transform 缓存目录
    Transform 缓存通常位于构建缓存子目录内,路径类似:~/.gradle/caches/transforms-3 或项目 .gradle/caches/transforms-3。命名随 AGP 版本变化(如 transforms-2、transforms-3)。
  5. 验证识别结果
    使用 ls -la 查看目录结构,确认各缓存目录是否存在、磁盘占用及内容特征。
# 示例:查看全局缓存目录
ls -la ~/.gradle/caches/
# 输出示例(部分):
# drwxr-xr-x  transforms-3
# drwxr-xr-x  modules-2
# drwxr-xr-x  build-cache-1

# 查看项目缓存目录(在项目根目录执行)
ls -la .gradle/
# 输出示例:
# drwxr-xr-x  caches
# drwxr-xr-x  buildOutputCleanup

输入输出物

输入输出
AGP 版本号(如 8.2.0)四类缓存目录的路径列表
Gradle 版本号(如 8.5)各缓存目录的子目录层级描述
项目构建配置(build.gradle)缓存目录磁盘占用概览

责任边界

角色职责
项目开发人员手动识别并记录项目缓存与构建缓存路径;设置 Gradle 属性以控制 Transform 缓存行为
CI/CD 管理员管理全局缓存目录的清理与保留策略;确保构建缓存与 Transform 缓存的一致共享

记录材料

  • 缓存目录结构截图(png/jpg)或文本输出(tree 命令结果)。
  • 缓存路径清单文件(JSON/YAML 格式),示例:
{
  "global_cache": "/home/user/.gradle/caches",
  "project_cache": "/workspace/MyApp/.gradle",
  "build_cache": "/workspace/MyApp/build-cache",
  "transform_cache": "/home/user/.gradle/caches/transforms-3"
}

异常处理

异常现象可能原因处理方式
全局缓存目录不存在首次运行 Gradle 或缓存被清空执行一次 Gradle 构建任务(如 ./gradlew tasks)自动创建
项目缓存目录缺失项目是新建或同步后未被使用执行 ./gradlew sync 或 ./gradlew assembleDebug 生成
Transform 缓存目录名异常(如 transforms-2 而非 transforms-3)AGP 版本差异或旧的缓存残留确认 AGP 版本对应规范,必要时删除旧缓存目录
权限不足无法读取目录Gradle 用户目录所有权属于其他用户使用 chown 或 sudo 查看,或在 gradle.properties 中指定自定义缓存路径

验收标准

  • 能够明确指出四种缓存目录的具体路径(路径)。
  • 理解全局缓存与项目缓存的生命周期差异:全局缓存跨项目共享,项目缓存仅单个项目使用。
  • 能根据 AGP 版本号判断 Transform 缓存目录的命名规则(如 transforms-3 对应 AGP 8.x)。
  • 手动或脚本输出缓存目录树状结构,并验证关键子目录(如 modules-2、transforms-3、build-cache-1)存在。

缓存目录关系示意图

Gradle 缓存目录结构(AGP 升级视角) Gradle 缓存 全局缓存 ~/.gradle/caches 项目缓存 ./.gradle 构建缓存 build-cache-* Transform缓存 transforms-3 构建缓存 build-cache 项目 caches .gradle/caches Transform缓存 transforms-3 注意:Transform 缓存目录名(transforms-3)与 AGP 版本强相关,AGP 7.x 使用 transforms-2,AGP 8.x 使用 transforms-3。 构建缓存也可通过 Gradle 属性配置为全局共享或项目独立,需根据团队策略选择。
提示:在 AGP 升级后,如果遇到 Transform 相关的编译错误,优先检查 transforms 缓存目录是否仍为旧版本命名。删除旧的 transforms 目录(如 transforms-2)并重新构建,可快速解决缓存状态不一致问题。