Android Studio的.gradle文件夹迁移到D盘,彻底解决C盘爆满 📅 发布时间:2026/9/9 13:43:12 👁 浏览次数: 打开Android Studio正准备跑一个Demo突然发现C盘满了。清理完各种缓存和临时文件空间还是不见多。后来我把目光移到用户目录这才发现.gradle这个文件夹已经悄悄吃掉了将近30GB。说实话当时挺震惊的一个构建工具文件夹怎么会有这么大体积。如果你也遇到过类似状况——明明没装多少软件C盘却总是红到发紫那这篇内容基本就是为你准备的。我要说的是如何把Android Studio的.gradle文件夹从C盘迁走同时保证项目构建完全不受影响顺带分享一些迁移过程中容易踩的坑。1. 为什么说.gradle是C盘空间的最大隐形杀手之一1.1 先搞清楚.gradle到底装了什么先说结论.gradle这个目录是Gradle构建系统的本地工作目录位于你的用户主目录下比如C:\Users\你的用户名\.gradle。它里面主要缓存这几类东西caches这个子目录占了绝大部分空间。里面是本机所有Android项目用到的依赖库jar包、aar包、Gradle插件、构建生成的中间文件快照。项目越多、依赖越复杂这个文件夹膨胀得越快。wrapperGradle Wrapper分发的各个版本Gradle压缩包和完整解压产物。如果你同时维护多个项目每个项目锁定的Gradle版本又不一样那这里就是一堆版本的堆积。daemonGradle守护进程相关的日志和临时文件一般在几十MB到几百MB不等。jdks某些Android Studio版本会把下载的JBRJetBrains Runtime放在这里。kotlin、native等目录Kotlin编译缓存、native编译产物也是占空间的大头。1.2 为什么清理了还是会复发很多人的第一反应是手动删掉.gradle里的内容。问题在于只要你下次构建项目Gradle会把依赖重新下载一遍、重新生成缓存几个G的空间又回来了。说白了这里不是一次性垃圾而是高频使用的构建缓存。只清理不迁移等于白干。另外一个更隐蔽的问题是Android Studio本身有一个内置的SDK目录默认也放在C:\Users\你的用户名\AppData\Local\Android\Sdk。如果你从来没配置过SDK的system-images、build-tools加起来十几个G也很正常。不过这次的主角是.gradleSDK那边我也是用同样的思路处理的后面会顺带提一嘴。1.3 迁移方案对比复制粘贴 vs 符号链接最朴素的想法是把.gradle文件夹剪切到D盘然后让它像没动过一样正常工作。但Gradle在启动时会固定读取USER_HOME/.gradle这个路径你没法通过配置文件让它完全换目录环境变量GRADLE_USER_HOME可以改但Android Studio的Gradle Wrapper在某些场景下不一定会完全遵循这个变量踩坑概率高。真正好用的方案是移动目录 创建符号链接符号链接先把.gradle搬到D盘再在原来的位置C:\Users\你的用户名\.gradle创建一个指向D盘新位置的符号链接。这样Gradle和Android Studio看到的是原路径实际读写全部落在D盘连环境变量都不用改省心。符号链接和快捷方式的区别要记牢快捷方式只是入口部分程序不认符号链接是文件系统层面的重定向程序完全感知不到区别。我们就是要这种无缝效果。2. 迁移前必做的磁盘规划与工具选择2.1 判断目标盘的条件别急着动手先想清楚把.gradle迁到哪个盘优先选SSDGradle构建过程中依赖缓存读取频率非常高机械硬盘跑起来构建速度会有明显下滑。如果是台式机目标盘最好是一块空闲的SATA SSD或NVMe SSD如果是笔记本考虑数据盘或第二块M.2接口。剩余空间要大于当前.gradle体积的两倍迁移过程中需要同时存在源文件和目标文件的一份拷贝空间不够会中途失败。我见过有人目标盘只剩5GB源文件夹15GB结果robocopy跑到一半报错源文件还被部分标记乱成一团。文件系统要求NTFS符号链接在NTFS上支持最完善。如果你的D盘是FAT32或exFAT先转换成NTFS再操作否则mklink /D会失败。2.2 先看当前.gradle到底多大在迁移之前先在PowerShell按Win X选择Windows PowerShell或终端里跑一个命令看清楚体积分布Get-ChildItem -Path $env:USERPROFILE\.gradle -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum | Select-Object {Name SizeGB; Expression { [math]::Round($_.Sum / 1GB, 2) }}如果想看具体哪个子目录占地方可以逐层进入caches、wrapper等目录用资源管理器的属性看大小或者用工具扫描。顺带说一句这里最好把Android Studio完全退出不然某些文件正被占用后续复制会报错。据统计一个维护了3-5个中型项目的开发者.gradle轻松到10GB以上如果你经常升级AGP版本wrapper目录里可能塞满了从6.7到8.2各个版本的完整Gradle发行包这里的浪费比caches还夸张。2.3 复制工具用哪个robocopy还是文件资源管理器官方一点、稳一点的做法推荐用Windows自带的robocopy。它的优势在于支持多线程复制速度比资源管理器快。能完整保持文件的路径结构、时间戳、属性。中途失败可以断点续传加个/Z参数就行。可以复制隐藏文件和系统文件。之前我在迁移时图省事直接CtrlX/CtrlV剪切整个.gradle文件夹结果几个G的小文件主要是caches里的jar包和临时文件复制了将近20分钟期间还遇到个别文件被进程占用弹窗。后来用robocopy /MT多线程同样的数据量几分钟搞定。PowerShell命令大致长这样假设目标路径是D:\Android\.gradlerobocopy $env:USERPROFILE\.gradle D:\Android\.gradle /E /MOVE /COPY:DAT /R:1 /W:1 /MT:16参数含义拆解一下/E复制所有子目录包括空目录。/MOVE复制完成后删除源文件等于移动。/COPY:DAT复制数据、属性、时间戳够用了不需要复制安全属性。/R:1W:1失败重试1次等待1秒。默认重试100万次卡住会很痛苦。/MT:1616线程并行复制。到这一步你会发现迁移过程其实分为两大件事先让新文件夹完整落地再处理原路径的重定向。两步缺一不可。3. 核心操作文件夹迁移与符号链接建立3.1 迁移前必须退出所有相关程序这一步看起来像废话但很多人栽在这。Android Studio、VS Code的Gradle插件、Java进程、还有在后台运行的Gradle守护进程都可能锁定.gradle里的文件。不退出直接执行/MOVErobocopy会报一堆正在使用错误甚至可能产生半迁移状态。建议操作关闭Android Studio。在任务管理器里看一下有没有java.exe进程残留有的话右键结束这通常是Gradle Daemon或Android Studio的JVM进程。命令行执行gradle --stop可以停掉所有Gradle守护进程如果环境变量里有Gradle命令的话。必要时重启一次电脑干净利落。3.2 正式执行迁移打开PowerShell管理员模式因为这个操作会创建符号链接普通权限下mklink可能会被系统拒绝依次执行# 1. 创建目标目录 New-Item -ItemType Directory -Path D:\Android\.gradle -Force # 2. 执行移动相当于剪切粘贴 robocopy $env:USERPROFILE\.gradle D:\Android\.gradle /E /MOVE /COPY:DAT /R:1 /W:1 /MT:16执行完之后C:\Users\你的用户名\.gradle应该已经不存在了或只剩空壳而D:\Android\.gradle里是完整的数据。这里有个细节要注意如果.gradle目录体积特别大比如超过20GBrobocopy跑完可能需要十几分钟。这期间不要强行中断。如果想看进度robocopy默认会实时打印百分比和文件数耐心等一下就好。3.3 创建目录符号链接迁移完成后在原来的路径位置创建符号链接# 以管理员身份运行 cmd /c mklink /D C:\Users\你的用户名\.gradle D:\Android\.gradle注意路径里有空格不用加引号PowerShell传参时整体传过去即可但如果你用cmd手动敲带空格的路径要加引号。mklink /D是目录链接不要用成mklink那是指文件。创建成功后资源管理器里看C:\Users\你的用户名\.gradle会显示一个带箭头图标的快捷方式但性质完全不同——一切读写都会穿透到D:\Android\.gradle。如果想确认链接状态用这个命令cmd /c dir C:\Users\你的用户名会看到类似[.gradle]的带SYMLINKD标记的条目说明符号链接生效。3.4 顺手把SDK和AVD也迁移了既然都动到用户目录了建议一次性把另外两个大户也迁走Android SDK默认位置C:\Users\你的用户名\AppData\Local\Android\Sdk。操作前在Android Studio的Settings SDK Location里看一下当前路径然后同样用robocopy迁到D:\Android\Sdk再创建符号链接。AVD模拟器镜像默认位置C:\Users\你的用户名\.android\avd。这个文件夹也很大尤其是你创建过多个系统镜像的模拟器。同样迁移链接。但要注意AVD迁移有个额外的坑.avd文件夹里有一个config.ini文件里面用绝对路径记录了你镜像包的位置迁移后如果启动失败改一下image.sysdir.1和skin.path等字段的相对路径或新绝对路径即可。这个属于经验丰富的老玩家才熟悉的坑新手建议先只迁.gradle跑通流程再考虑SDK和AVD。3.5 迁移后的首次构建验证迁移完成后打开Android Studio打开任意一个项目让它跑一次Sync。观察两个点同步是否成功Gradle会重新读取C:\Users\你的用户名\.gradle实际访问D:\Android\.gradle。理论上一切无缝但如果之前有未下载完成的lock文件可能会触发重新下载。第一次Sync速度可能比平时慢这正常。确认空间释放看C盘剩余空间是否明显增加。如果想进一步证明读写真的发生在D盘可以在迁移后做一个小实验在D盘.gradle下新建一个txt文件然后在C盘原路径下用资源管理器看那个文件夹能看到同一个文件。删掉它D盘的文件也没了。这就说明链接是双向的。4. 迁移后常见意外与排查链路4.1 意外1Android Studio提示无法访问.gradle有一种情况迁移后Android Studio同步报错提示找不到.gradle目录。排查步骤检查符号链接是否创建成功在资源管理器地址栏输入C:\Users\你的用户名\.gradle看能否正常进入。如果提示路径错误或无法访问说明链接指向了不存在的目标。确认D:\Android\.gradle确实存在权限是否正常右键属性安全看当前用户有没有完全控制权限。检查Android Studio是否真的以当前用户身份运行。我见过有人用管理员权限打开Android Studio然后系统把用户目录解析成了C:\Windows\system32\config\systemprofile自然找不到原路径的链接。这种问题不是迁移造成的是权限边界不一致。4.2 意外2构建一切正常但C盘空间不降反升这种问题比较隐蔽。它通常发生在你没有完全退出Android Studio就开始迁移时部分文件虽然被robocopy复制了但源路径里还有残留文件被进程占用还没来得及删除。另一种可能是caches目录下有modules-2这种临时锁文件robocopy复制了副本但源路径有些新生成的缓存目录仍在写入。排查思路再看一眼C盘原路径下还有没有files-2.1、modules-2等子目录。有的话直接删除。删除后如果Android Studio下次启动又生成新的缓存说明某个插件强制把缓存写回了原路径这时需要去环境变量里显式设置GRADLE_USER_HOMED:\Android\.gradle双重保险。如果设置了GRADLE_USER_HOME同时删掉原来的符号链接Gradle会全力使用新路径。缺点是某些老版本Android Studio和Gradle的配合可能不完全认这个变量还是建议符号链接为主环境变量为辅。4.3 意外3Gradle Wrapper的下载地址重置到C盘有的项目用Gradle Wrapper时会重新下载distribution到新路径但下载了一半失败然后整个wrapper目录出现lock文件。此时新项目构建会一直卡在下载阶段。解决办法删除D:\Android\.gradle\wrapper\dists下的半截下载文件。在项目的gradle-wrapper.properties里确认distributionUrl指向的版本和本地缓存的版本一致。如果团队内使用的Gradle版本五花八门建议在迁移完成后对所有项目逐个Sync一次把后续需要用的版本都下载好省得下次换项目又要重新下。4.4 迁移后如何验证旧文件清理干净用这几个点确认迁移是否完整C:\Users\你的用户名\.gradle是一个符号链接不是真实文件夹且能正常访问。D:\Android\.gradle的目录结构和迁移前基本一致caches、wrapper这些子目录都在。robocopy日志显示没有失败文件退出码1表示有文件复制成功且完全同步这个要区分清楚退出码0是无变化1是有复制成功8以上才是异常。在Android Studio的File Sync Project with Gradle Files后控制台没有红色错误。5. 迁移后的日常维护与进阶玩法5.1 给.gradle做定期减肥就算迁到了D盘缓存还是会持续增长。建议每两个月做一次清理打开D:\Android\.gradle\wrapper\dists把不用的Gradle版本删掉。项目每次构建前会重新下载需要的版本留着旧版本没意义。打开D:\Android\.gradle\caches观察modules-2的大小。如果长期构建都稳定可以直接删掉这个目录下的files-2.1让Gradle在下次构建时重新缓存。第一次会慢但空间释放非常可观。用Android Studio自带的File Invalidate Caches清理IDE级缓存时顺手把C:\Users\你的用户名\.gradle\daemon里的旧日志删掉。这里推荐一个小脚本定期执行PowerShell# 删除超过30天的Gradle daemon日志 Get-ChildItem -Path D:\Android\.gradle\daemon -Recurse -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item -Force # 删除wrapper下所有低版本假设我们只用7.0以上 Get-ChildItem -Path D:\Android\.gradle\wrapper\dists -Directory | Where-Object { $_.Name -match ^gradle-([6-9]\.) } | ForEach-Object { if ($_.Name -match gradle-(6\.)) { Remove-Item $_.FullName -Recurse -Force } }注意别删正在使用的版本否则下次构建会让你欲哭无泪。5.2 多个开发机如何同步.gradle缓存如果你家里两台电脑、一台办公机三个地方各有一份大缓存最省事的同步方式是在一台主力机上构建好一个项目后把D:\Android\.gradle整个文件夹打包传到另一台机器放到相同路径然后也创建符号链接。这样目标机器首次Sync会快得离谱。不过我不推荐日常用网盘直接同步.gradle/caches因为缓存文件的索引是基于机器路径建立的不同机器路径不一致会引发Gradle的缓存冲突反而会导致反复重建缓存。5.3 把.gradle放到内存盘想法很好但不建议我试过在32GB内存的机器上用ImDisk把.gradle放到内存盘构建速度确实有提升但代价很大内存盘重启后数据丢失意味着每次开机后首次构建要把整个依赖重新下载/解压一遍等于把缓存失效的成本全部浪费了。如果你的项目依赖体积动辄10GB内存盘容量根本装不下。更好的选择是保证D盘是一块口碑好一点的NVMe SSD顺序读取和随机读取速度都很稳。5.4 环境变量GRADLE_USER_HOME要不要设置前面提到过符号链接是目前最省事的方案。再补充一下GRADLE_USER_HOME的适用场景命令行独立使用Gradle如果你经常在终端敲gradle build而非通过Android Studio的Wrapper设置GRADLE_USER_HOME效果更直接。CI/CD机器如果机器上跑Jenkins、GitLab Runner之类的自动化构建符号链接方式不适用因为每次构建可能用不同的用户身份登录符号链接的创建和权限管理过于麻烦这时用环境变量指定GRADLE_USER_HOME最合理。Android Studio项目Android Studio生成的项目几乎都走Gradle WrapperGRADLE_USER_HOME的优先级取决于gradle-wrapper.properties里的设置。实测下来如果你既设置环境变量又保留符号链接Gradle会优先读环境变量此时原路径的符号链接就没用了如果环境变量没设就走符号链接。我个人更推荐符号链接为主环境变量为辅。符号链接解决IDE场景环境变量留给命令行和特殊情况双保险。别两个同时设置不同路径那样会精神分裂。5.5 迁移SDK时的额外注意事项刚才说了SDK也是C盘大户这里再补充一个细节Android SDK的AVD模拟器镜像system-images非常占用空间但如果你创建了多个AVD每个AVD的userdata.img、sdcard.img都是几个G起步。这类文件建议不要用符号链接直接迁移因为模拟器在运行时对镜像文件的随机读写频率高如果你目标盘是一块SATA SSD且系统盘是NVMe性能会有感知。稳妥做法在Android Virtual Device Manager里把AVD路径整体改到D盘某个目录Android Studio会生成一份新的ini文件指向新位置然后删除旧的AVD。如果嫌麻烦用符号链接也能跑但别抱怨模拟器偶尔启动慢。不过这些是后话先把.gradle这单干完C盘空间已经能回来一大半了。6. 我没提的坑网络与代理的影响最后说一个影响.gradle体积、但很容易被忽略的点Gradle下载依赖时的网络问题。如果网络不稳定Gradle在依赖下载失败后会自动重试但每次失败都会在caches目录留下一份*.part临时文件。积少成多这些残缺文件也占空间。迁移前最好先用代理或镜像源确保依赖能顺利下载用国内镜像如阿里云Maven镜像可以显著提高成功率也避免C盘被半截文件塞爆。迁移后我在D:\Android\.gradle\caches\modules-2\files-2.1下清理过几个原本下载失败留下的空壳目录随随便便几百MB。所以如果你也发现缓存体积大得离谱先看看是不是这里骗了你的空间。7. FAQ快速问答Q1迁移后.idea目录里的iml文件会不会受影响不会.idea和.gradle是两回事。.idea是IDE工程配置基本不动也不需要动。Q2迁移后旧项目还能正常打开吗能。符号链接对项目工程完全透明不管是老项目还是新项目构建系统都从原路径读取。Q3如果D盘空间也不够了怎么办你可以把.gradle拆成多块比如caches和wrapper分开放到不同硬盘然后分别创建符号链接。但是我强烈不建议这么做Gradle的org.gradle.jvmargs、缓存一致性都会受影响性能得不偿失。不如直接把D盘清一遍。Q4迁移后要不要在Android Studio里配置Gradle home如果你项目用的是Gradle Wrapper不需要。如果你用的是本地Gradle distribution在Settings Build Tools Gradle里指定了本地路径那你要关注的是那个Gradle压缩包放在哪一般情况下和.gradle无关不用改。Q5迁移后构建报“Could not install Gradle distribution from ...”怎么办大概率是wrapper下载中断导致的缓存损坏。删掉D:\Android\.gradle\wrapper\dists对应版本的目录重新Sync即可。8. 最后多聊两句做Android开发这几年见了不少人的C盘被Android Studio折磨到窒息。有的人选择重装系统有的人用各种清理软件反复扫其实最治本的思路就是把这些工具链的缓存目录物理隔离出C盘。我这套迁移方案其实是很多老Android开发默默在用的常规操作网上很少有人系统整理。你按这个流程走一遍不仅能腾出几十个G更关键的是以后每次构建都顺手把缓存扔在D盘C盘的写入压力小了系统也不那么容易卡顿。我的建议是迁移完成后尽量坚持每周或每两周用上面那个脚本清一次daemon和wrapper缓存。这个小习惯能帮你长期保持C盘稳定在健康水位而不是每次等到爆红才着急忙慌地处理。