jamiechoo

 

在 Android Studio 中频繁升级、切换、测试不同版本的依赖,会在你的 Mac 上留下大量的缓存文件,占用惊人的磁盘空间。下面我为你提供一套从专项到整体的完整清理方案

第一部分:专项清理 - 彻底清理 Gradle 缓存和残留

这是解决问题的核心。Gradle 将所有下载的依赖包、编译产物等都存储在它的缓存目录中。

步骤 1: 找到并清理 Gradle 缓存目录

Gradle 缓存默认位于用户主目录下的 .gradle 文件夹中。这里存放着所有版本的依赖库。

  1. 打开 Finder。

  2. 按下 Command + Shift + G 快捷键,打开“前往文件夹”窗口。

  3. 输入路径 ~/.gradle 并点击“前往”。

  4. 你会看到一个名为 .gradle 的文件夹。不要直接删除整个文件夹,因为这会让你之后的所有项目在编译时重新下载所有依赖,非常耗时。

  5. 进入 .gradle/caches 目录。这个 caches 文件夹是我们可以安全清理的主要目标。

    • modules-2:这里面存储着所有从远程仓库(如 Google、Maven Central)下载的依赖库文件(.jar.aar.pom 等)。清理这个效果最明显。

    • transforms:存储着经过转换(如由 .aar 解压出的 res 和 jni 文件)的依赖文件。也可以清理。

    • jars:编译时的临时 jar 文件缓存。

最安全高效的清理命令是使用终端:

# 这个命令会清理caches目录下的所有内容,但保留目录结构和其他配置(如wrapper)。
rm -rf ~/.gradle/caches/

执行后,下次编译任何项目时,Gradle 都会重新下载所需的依赖,但只会下载当前项目配置需要的版本,从而清除了所有历史版本和残留文件。

步骤 2: 清理项目本身的构建缓存

每个 Android 项目目录下都有一个 build 文件夹,它存储着该项目的编译产出物(如生成的类文件、APK 等)。切换分支或版本时也会产生残留。

  1. 在 Android Studio 中,对每个项目执行:

    • 菜单栏 → Build → Clean Project。

  2. 如果你想更彻底一点,可以手动删除项目根目录和每个模块目录下的 build 文件夹。

    • 在终端中,进入你的项目根目录,然后执行:

      # 删除当前项目及其所有子模块的build文件夹
      rm -rf */build
      rm -rf build/

步骤 3: 清理 Android SDK 组件(可选但有效)

Android SDK 也会占用大量空间,尤其是一些已经过时或不再使用的系统镜像(Emulator System Images)。

  1. 打开 Android Studio → Preferences → Appearance & Behavior → System Settings → Android SDK。

  2. 切换到 SDK Platforms 选项卡。取消勾选你确定不再需要的 Android 版本(比如很久以前的 API 级别),然后点击“Apply”进行卸载。

  3. 切换到 SDK Tools 选项卡。这里可以清理一些旧的构建工具版本(如 CMake, NDK 的旧版)。但请谨慎操作,确保不会影响现有项目。


第二部分:常规清理 - 全面释放 Mac 硬盘空间

工具 1: 使用系统自带的“管理储存空间”

  1. 点击屏幕左上角 苹果菜单 → 关于本机 → 储存空间 → 管理...。

  2. 这是一个非常直观的工具,可以帮你:

    • 优化储存空间:自动移除已观看的 iTunes 影片和电视节目。

    • 自动清倒废纸篓:开启后超过30天的项目会自动删除。

    • 查看文件分布:清晰地看到“应用程序”、“文档”、“系统数据”等分别占用了多少空间。

工具 2: 使用专业的第三方清理软件(强烈推荐)

对于开发者来说,第三方工具能更深入地清理系统缓存、日志、语言包等。

  • CleanMyMac X:功能强大,界面友好,可以安全地扫描并清理系统垃圾、邮件附件、iPhoto 废纸篓、大型旧文件等。这是很多 Mac 用户的标配。

  • DaisyDisk:以非常直观的可视化扇形图展示磁盘空间占用情况,让你一眼就能找到是哪个巨型文件或文件夹占用了空间。然后你可以自行决定是否删除。

手动清理其他常见目标:

  1. ~/Library/Developer/Xcode/:如果你也做 iOS 开发,Xcode 的模拟器和衍生数据(DerivedData)是著名的空间杀手。

  2. ~/Library/Caches/:所有应用程序的缓存文件所在地。你可以安全地删除这个文件夹下的所有内容(但应用程序再次启动时可能会重新生成缓存)。

  3. ~/Library/Application Support/:查看是否有已卸载应用残留的文件夹。

  4. 下载文件夹:定期整理你的 ~/Downloads 文件夹。


第三部分:最佳实践 - 如何避免未来再次出现此问题

  1. 使用 Gradle 构建扫描:在构建命令后加上 --scan,例如 ./gradlew build --scan。它会在浏览器中生成一个详细的报告,告诉你构建过程中下载了哪些依赖,耗时多久,帮助你分析依赖树。

  2. 定期维护:将磁盘清理作为一项月度或季度例行任务。

  3. 使用 Docker(高级):对于需要测试不同环境(如不同 JDK 版本、Gradle 版本)的项目,可以考虑使用 Docker 容器。编译环境在容器中,宿主机(你的 Mac)就不会被污染。

总结一下你的操作顺序:

  1. 终端执行 rm -rf ~/.gradle/caches/ → 效果最直接,针对你的问题。

  2. 在 Android Studio 中 Clean Project。

  3. 打开 苹果菜单管理储存空间 或使用 CleanMyMac X / DaisyDisk 进行全局清理。

  4. 养成定期清理的好习惯。

这样操作下来,轻松腾出几十 GB 空间是非常普遍的。

 
 

为什么不能随便手动删除 .gradle/caches/

你遇到的情况完美解释了原因:

  • Gradle 缓存不仅仅是依赖库(.jar.aar):它还包括了构建任务的输出快照(Snapshot)、增量编译信息、配置元数据等。

  • 它是一个有状态的系统:Gradle 依赖这些缓存文件来避免重复工作(比如如果输入没变,就直接用上次的输出)。你删除了部分状态,它的“账本”就对不上了,所以会报 FileNotFoundException

 

 
 
 

posted on 2025-08-21 01:05  jamiechoo  阅读(423)  评论(0)    收藏  举报

导航