缓存目录结构识别:全局缓存、项目缓存、构建缓存、Transform 缓存
适用场景
- AGP 版本升级前,需要识别各类型缓存目录的位置与内容,以制定缓存清理或迁移策略。
- 构建异常(如 Transform 冲突、资源链接失败)时,排查缓存目录结构有助于定位问题。
- CI/CD 环境初始化或缓存策略调整时,需区分全局缓存与项目缓存。
前置条件
- 确认当前 AGP 版本号(可在
build.gradle 或 project/build.gradle.kts 中查看 com.android.tools.build:gradle 依赖)。
- 拥有 Gradle 用户目录(一般为
~/.gradle)及项目根目录的读权限。
- 了解 Gradle 缓存基本概念:全局缓存、项目缓存、构建缓存、Transform 缓存的分层关系。
操作步骤
- 定位全局缓存目录
默认路径:~/.gradle/caches。进入后观察 modules-2、transforms-* 等子目录。
- 定位项目缓存目录
项目根目录下的 .gradle 文件夹(例如 MyApp/.gradle)。内部含 buildOutputCleanup、caches 等子目录。
- 定位构建缓存目录
由 build-cache 配置决定,默认位置:项目根目录下的 build-cache 文件夹,或全局 ~/.gradle/caches/build-cache-*。可通过 gradle.properties 中的 org.gradle.caching 开启。
- 定位 Transform 缓存目录
Transform 缓存通常位于构建缓存子目录内,路径类似:~/.gradle/caches/transforms-3 或项目 .gradle/caches/transforms-3。命名随 AGP 版本变化(如 transforms-2、transforms-3)。
- 验证识别结果
使用 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)存在。
缓存目录关系示意图
提示:在 AGP 升级后,如果遇到 Transform 相关的编译错误,优先检查 transforms 缓存目录是否仍为旧版本命名。删除旧的 transforms 目录(如 transforms-2)并重新构建,可快速解决缓存状态不一致问题。