影评周公子 2026-02-26 15:15 采纳率: 99%
浏览 6
已采纳

Android编译时C盘空间不足,如何清理Gradle缓存和构建文件?

**问题:Android编译时C盘空间不足,如何安全高效清理Gradle缓存和构建文件?** 在Windows系统下,Android Studio默认将Gradle全局缓存(`~/.gradle`)和项目级构建输出(`app/build/`、`.gradle/`)均存放于C盘用户目录,长期编译易导致C盘爆满(常占用20–50GB+)。盲目删除可能引发依赖重下载或构建失败。需区分清理层级:① **项目级**:删除`./gradlew clean` + 手动清除`build/`和`.gradle/`(不影响其他项目);② **全局级**:用`gradle --stop`停后台进程后,精简`~/.gradle/caches/`(保留`modules-*/`中已解析的依赖,可删`transforms-*/`、`journal-*`及过期`versions/`);③ **进阶优化**:通过`gradle.properties`配置`org.gradle.caching=false`(禁用构建缓存)、`org.gradle.configuration-cache=true`(减小元数据体积),并迁移Gradle路径至D盘。建议配合`windirstat`定位大文件,避免误删`wrapper/dists/`(含Gradle发行版)。
  • 写回答

1条回答 默认 最新

  • 扶余城里小老二 2026-02-26 15:15
    关注
    ```html

    一、现象定位:C盘空间告急的根源分析

    Android开发中,Gradle在Windows下默认将三类关键数据落盘至C:\Users\{username}\.gradle\(全局缓存)及各项目根目录下的.gradle/build/(项目级输出)。经实测,一个中型多模块项目持续迭代6个月后,~/.gradle/caches/可达32GB(其中transforms-3/占18GB),build/单项目平均占用4–7GB。根本矛盾在于:Gradle为加速构建而持久化大量中间产物(如dex转换、AAR解压、编译缓存),但未提供自动老化清理策略。

    二、安全清理:三层分级操作规范

    1. 项目级清理(秒级见效,零风险)
      ./gradlew clean → 清空app/build/及子模块build/
      手动删除项目根目录下.gradle/(注意:~/.gradle/);
      ✅ 优势:不影响其他项目,重编译仅需重新生成task图,耗时<30s。
    2. 全局缓存精简(需停进程,推荐每月执行)
      gradle --stop(终止所有Daemon进程)→ taskkill /f /im java.exe(双重保险);
      进入%USERPROFILE%\.gradle\caches\,保留:modules-*/(已解析依赖)、jdk-toolchains/
      安全删除:transforms-*/(可重建)、journal-*(日志元数据)、versions/中<30天未访问的子目录。
    3. 危险操作禁区(严禁执行)
      ❌ 删除wrapper/dists/(含gradle-8.4-bin.zip等发行版,重下载耗时且易失败);
      ❌ 清空modules-*/(将触发全量Maven依赖重解析,网络+CPU双开销)。

    三、空间治理:进阶优化方案对比表

    方案配置位置生效范围预期节省空间副作用
    禁用构建缓存gradle.properties全局5–12GB(caches/build-cache-增量编译失效,clean build耗时+15%
    启用配置缓存gradle.properties全局2–4GB(减少.gradle/元数据体积)需Gradle 8.0+,部分插件不兼容
    迁移Gradle主目录GRADLE_USER_HOME=D:\gradle(系统环境变量)全局释放C盘全部.gradle数据首次迁移需重新下载wrapper和依赖

    四、可视化诊断:Windirstat实战流程图

    graph TD A[启动Windirstat] --> B[扫描C:\Users\{user}\.gradle] B --> C{识别Top3大目录} C -->|caches/transforms-3| D[确认无活跃构建后删除] C -->|caches/modules-2/files-2.1| E[跳过 - 保留核心依赖] C -->|wrapper/dists| F[跳过 - 避免重复下载] D --> G[运行gradle --stop] G --> H[手动删除transforms-3] H --> I[验证: gradle build --dry-run]

    五、长效防控:自动化清理脚本(PowerShell)

    # Save as 'cleanup-gradle.ps1'
    $gradleHome = "$env:USERPROFILE\.gradle\caches"
    Get-ChildItem "$gradleHome\transforms-*" | ForEach-Object {
      if ((Get-Date) -gt ($_.LastAccessTime.AddDays(7))) {
        Remove-Item $_.FullName -Recurse -Force
        Write-Host "Deleted stale transform: $($_.Name)"
      }
    }
    # 保留modules-2 & wrapper/dists,跳过journal-*(已内置过滤)
    

    建议通过Windows任务计划程序,设置每周日凌晨2点自动执行该脚本,并邮件通知清理结果。

    六、高阶避坑指南(5年+开发者必读)

    • ⚠️ AGP版本陷阱:Android Gradle Plugin 8.0+ 默认启用configuration-cache,若强制设false将导致Kotlin DSL构建失败;
    • ⚠️ 符号链接风险:勿用mklink将.gradle软链至D盘——Gradle Daemon会因路径解析异常崩溃;
    • 企业级推荐:在CI/CD中使用--no-daemon -Dorg.gradle.caching=false,避免缓存污染;
    • 磁盘监控:在Android Studio中安装Disk Space Analyzer插件,实时显示build/各子目录占比。
    ```
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 2月27日
  • 创建了问题 2月26日