在 Android Studio 中频繁升级、切换、测试不同版本的依赖,会在你的 Mac 上留下大量的缓存文件,占用惊人的磁盘空间。下面我为你提供一套从专项到整体的完整清理方案
第一部分:专项清理 - 彻底清理 Gradle 缓存和残留
这是解决问题的核心。Gradle 将所有下载的依赖包、编译产物等都存储在它的缓存目录中。
步骤 1: 找到并清理 Gradle 缓存目录
Gradle 缓存默认位于用户主目录下的 .gradle 文件夹中。这里存放着所有版本的依赖库。
-
打开 Finder。
-
按下
Command + Shift + G快捷键,打开“前往文件夹”窗口。 -
输入路径
~/.gradle并点击“前往”。 -
你会看到一个名为
.gradle的文件夹。不要直接删除整个文件夹,因为这会让你之后的所有项目在编译时重新下载所有依赖,非常耗时。 -
进入
.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 等)。切换分支或版本时也会产生残留。
-
在 Android Studio 中,对每个项目执行:
-
菜单栏 → Build → Clean Project。
-
-
如果你想更彻底一点,可以手动删除项目根目录和每个模块目录下的
build文件夹。-
在终端中,进入你的项目根目录,然后执行:
# 删除当前项目及其所有子模块的build文件夹 rm -rf */build rm -rf build/
-
步骤 3: 清理 Android SDK 组件(可选但有效)
Android SDK 也会占用大量空间,尤其是一些已经过时或不再使用的系统镜像(Emulator System Images)。
-
打开 Android Studio → Preferences → Appearance & Behavior → System Settings → Android SDK。
-
切换到 SDK Platforms 选项卡。取消勾选你确定不再需要的 Android 版本(比如很久以前的 API 级别),然后点击“Apply”进行卸载。
-
切换到 SDK Tools 选项卡。这里可以清理一些旧的构建工具版本(如 CMake, NDK 的旧版)。但请谨慎操作,确保不会影响现有项目。
第二部分:常规清理 - 全面释放 Mac 硬盘空间
工具 1: 使用系统自带的“管理储存空间”
-
点击屏幕左上角 苹果菜单 → 关于本机 → 储存空间 → 管理...。
-
这是一个非常直观的工具,可以帮你:
-
优化储存空间:自动移除已观看的 iTunes 影片和电视节目。
-
自动清倒废纸篓:开启后超过30天的项目会自动删除。
-
查看文件分布:清晰地看到“应用程序”、“文档”、“系统数据”等分别占用了多少空间。
-
工具 2: 使用专业的第三方清理软件(强烈推荐)
对于开发者来说,第三方工具能更深入地清理系统缓存、日志、语言包等。
-
CleanMyMac X:功能强大,界面友好,可以安全地扫描并清理系统垃圾、邮件附件、iPhoto 废纸篓、大型旧文件等。这是很多 Mac 用户的标配。
-
DaisyDisk:以非常直观的可视化扇形图展示磁盘空间占用情况,让你一眼就能找到是哪个巨型文件或文件夹占用了空间。然后你可以自行决定是否删除。
手动清理其他常见目标:
-
~/Library/Developer/Xcode/:如果你也做 iOS 开发,Xcode 的模拟器和衍生数据(DerivedData)是著名的空间杀手。
-
~/Library/Caches/:所有应用程序的缓存文件所在地。你可以安全地删除这个文件夹下的所有内容(但应用程序再次启动时可能会重新生成缓存)。
-
~/Library/Application Support/:查看是否有已卸载应用残留的文件夹。
-
下载文件夹:定期整理你的
~/Downloads文件夹。
第三部分:最佳实践 - 如何避免未来再次出现此问题
-
使用 Gradle 构建扫描:在构建命令后加上
--scan,例如./gradlew build --scan。它会在浏览器中生成一个详细的报告,告诉你构建过程中下载了哪些依赖,耗时多久,帮助你分析依赖树。 -
定期维护:将磁盘清理作为一项月度或季度例行任务。
-
使用 Docker(高级):对于需要测试不同环境(如不同 JDK 版本、Gradle 版本)的项目,可以考虑使用 Docker 容器。编译环境在容器中,宿主机(你的 Mac)就不会被污染。
总结一下你的操作顺序:
-
终端执行
rm -rf ~/.gradle/caches/→ 效果最直接,针对你的问题。 -
在 Android Studio 中 Clean Project。
-
打开 苹果菜单管理储存空间 或使用 CleanMyMac X / DaisyDisk 进行全局清理。
-
养成定期清理的好习惯。
这样操作下来,轻松腾出几十 GB 空间是非常普遍的。
为什么不能随便手动删除 .gradle/caches/?
你遇到的情况完美解释了原因:
-
Gradle 缓存不仅仅是依赖库(
.jar,.aar):它还包括了构建任务的输出快照(Snapshot)、增量编译信息、配置元数据等。 -
它是一个有状态的系统:Gradle 依赖这些缓存文件来避免重复工作(比如如果输入没变,就直接用上次的输出)。你删除了部分状态,它的“账本”就对不上了,所以会报
FileNotFoundException。
浙公网安备 33010602011771号