被 Gradle 下载折磨了三年,我写了个脚本一键搞定
事情是这样的。
前两天打开一个老项目,Android Studio 弹出来 Gradle Sync 的进度条,然后就开始转圈。
转了五分钟,还在转。
我瞄了一眼底部状态栏,Downloading gradle-5.4.1-all.zip,速度稳定在 0.3MB/s。
一个 120 多兆的文件,按这速度我得等到天荒地老。
这种事儿吧,说实话我已经经历无数次了。每次建新项目、切分支、或者帮同事排查问题,只要涉及到 Gradle 版本变更,就得重新经历一次这种漫长的等待。
不是哥们,2026 年了,下个构建工具还能这么慢?

很多朋友可能不知道,Gradle 下载慢这事儿,根本原因就一个。它默认从官方源 services.gradle.org 下载,服务器在国外,国内访问速度你懂的。
网上搜「Gradle 下载慢」,铺天盖地都是教你改镜像源的。腾讯云有 Gradle 镜像,阿里云也有,把 gradle-wrapper.properties 里的 distributionUrl 改成镜像地址就行。
但说实话,每次手动改这个,也挺烦的。
而且有时候你改了 distributionUrl,Gradle Wrapper 还是会先去官方源检查一下,或者下载到一半断了又得重来。还有那种情况,你直接把 zip 下下来了,但不知道该放哪个目录,放错了 Gradle 还是会重新下。
我自己就踩过这个坑。下了半天的 zip,放到了一个自以为正确的目录,结果 Gradle 根本不认,又给我重新下了一遍。
那一刻我是真的觉得,这事儿就不能自动化吗?
从下载到放到正确的目录,再到解压,不就是几个步骤的事儿吗。
所以我就写了个脚本。

说真的,一开始我也没想搞多复杂,就想写个下载脚本换个源就行了。但写着写着就停不下来了,最后搞出来一个还算完整的东西。
跟大家聊聊这个脚本干了啥。
第一步,下载。脚本支持三个镜像源,腾讯云、阿里云、还有 Gradle 官方源。运行的时候会问你选哪个,默认是腾讯云,直接回车就行。
你想想看,腾讯云镜像在国内的下载速度,基本能跑满带宽。原来 0.3MB/s 的速度,换了镜像源之后直接干到 10MB/s 以上。
120 兆的文件,不到 30 秒就下完了。
第二步,目录结构。脚本下载的 zip 不是乱放,而是按照 Gradle Wrapper 的标准目录结构来放。
标准的目录结构是 dists\gradle-{版本号}\{哈希}\gradle-{版本号内层}\。这个哈希是 distributionUrl 的 MD5 转 base36 得到的。Android Studio 自动下载时就是这么放的,脚本会按照这个结构一模一样的建目录。
也就是说,你下下来的 zip 放到正确位置之后,Gradle 会直接认,不需要额外配置。
第三步,移动。下完之后脚本会自动把 zip 文件移动到刚刚生成的哈希目录里,默认在 C:\Users\你的用户名\.gradle\wrapper\dists 下面。这个目录就是 Gradle Wrapper 存放下载好的 Gradle 发行版的地方。
这一步解决了我之前踩的那个坑,不用再纠结 zip 该放哪儿了。
第四步,解压。zip 下完之后,脚本会自动在同一个哈希目录里解压,而且解压的时候有进度条,你能实时看到解压到哪了。
这个进度条做的时候还踩了个坑。一开始我用的是 PowerShell 自带的 Expand-Archive,结果这玩意不支持进度显示,解压的时候就像卡死了一样,没有任何反馈。后来改成了用 .NET 的 ZipFile 类手动遍历 zip 里的文件逐个解压,才加上进度条。

第五步,长路径检测。-all 版本里有些文件嵌套很深,解压路径可能超过 Windows 默认的 260 字符限制。脚本在解压前会自动检测系统有没有开启长路径支持,如果没有,会尝试自动开启,开启不了也会提示你以管理员运行,尽可能避免解压到一半失败。

另外,脚本的目标目录和镜像源都可以在运行时交互修改,不用去改脚本文件。启动的时候会显示当前配置,然后问你要不要换镜像源、要不要改目录。你如果想用阿里云的源,或者想把文件放到别的目录,直接选就行。
用法也特别简单。双击运行 download-gradle.bat,然后按提示操作就行。
============================================ Gradle 下载工具 (镜像加速)============================================ 当前配置: 目标目录: C:\Users\yfg10\.gradle\wrapper\dists 镜像源: https://mirrors.cloud.tencent.com/gradle 镜像源: 1.腾讯云(默认) 2.阿里云 3.官方源 4.自定义选择镜像源 (1-4, 回车保持默认):修改目标目录?(Y/N, 回车保持默认): 版本号示例: 6.5-bin 7.5-all 8.0-bin 8.5-all -bin: 仅二进制(小) -all: 含源码文档(大)请输入 Gradle 版本号:
输入版本号,比如 7.5-all,脚本就会自动下载、移动到正确目录、解压、创建 .ok 标记,一气呵成。
整个过程,从输入版本号到全部完成,大概 30 秒到 1 分钟,取决于你的网速。
跟之前等 30 分钟比,这个提升还是挺明显的。

脚本纯 Windows 批处理,不依赖任何额外安装的东西,只要有 PowerShell 就行,Windows 10 以上都自带。不需要装 Python,不需要装 Node,不需要装任何乱七八糟的依赖,双击就能跑。
写这个脚本的过程中我也踩了不少坑,坦率的讲比写脚本本身花的时间还多。
最坑的是 Windows 批处理的编码问题。一开始脚本写完,一运行中文全变成乱码了,各种莫名其妙的报错。后来才发现,Windows CMD 默认用 GBK 编码读取 .bat 文件,而我写的是 UTF-8。
改了编码之后又是一堆转义问题。CMD 的引号转义简直是个灾难,双引号里面嵌双引号,转义符 \ 在不同上下文里含义还不一样。最后我用 PowerShell 的 -EncodedCommand 参数,把整个 PowerShell 脚本 base64 编码后传进去,才算彻底绕开了 CMD 的转义地狱。
还有解压的时候报「目录名称无效」,查了半天才发现是 zip 内部路径用 / 分隔,而 Windows 的路径用 \,两者混在一起 .NET 的 ExtractToFile 就不认了。加了一个 .Replace('/', '\\') 才修好。
另外还踩了哈希目录的坑。刚开始我以为 zip 直接放到 dists 下就行,后来发现 Gradle Wrapper 找的目录名是一个哈希值,跟下载 URL 有关。脚本里面就加上了根据 URL 计算 MD5 转 base36 的逻辑,保证目录结构跟 Android Studio 自动下载的一模一样。
这些坑吧,说实话一开始我也没想到。但踩完之后确实学到了不少 Windows 批处理和 PowerShell 的冷知识,这些东西你不去踩坑是学不到的。
回到最开始那个问题,Gradle 下载慢这事儿,其实解决方案一直都在那里。镜像源是公开的,distributions 目录的路径也是固定的,解压更是系统自带的功能。
缺的不是信息,是一个把这些步骤串起来的工具。
我有时候觉得,很多信息差就是这样。不是说你不知道这个信息,而是你不知道怎么把这些信息组合成一个可执行的流程。一个脚本,说到底就是把一个人的经验固化下来,让其他人不用再重复踩坑。
你不用再去搜「Gradle 下载慢怎么办」,不用去查 distributions 目录在哪,不用去研究 zip 解压后目录名为什么跟文件名不一样。这些我都替你踩过了,固化在脚本里了。
这也算是我的一点小贡献吧。
脚本我已经放出来了,在公众号回复「gradle」就能获取下载链接。
不知道对大家有没有用,但如果你也被 Gradle 下载折磨过,试试看吧。
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
夜雨聆风