开启VPN代理可访问境外网络但Gradle编译失败,Android Studio无法下载Gradle资源问题咨询
Gradle编译失败(VPN生效但仍报错)的原因与解决办法
作为经常帮开发者排查Gradle问题的人,这两个场景我碰到过太多次了,给你梳理一下核心原因和可行的解决步骤:
一、VPN能访问境外网络但Gradle编译失败的常见原因
- Gradle没走VPN代理:浏览器的全局代理和Gradle的网络请求是分开的,Gradle默认不会自动继承系统代理,哪怕你能翻墙浏览网页,Gradle可能还是直接走本地网络请求资源。
- 本地缓存损坏:之前下载失败留下的损坏缓存文件会拖后腿,哪怕现在网络通了,Gradle优先读缓存,自然会报错。
- 镜像源冲突:如果之前配置过国内Gradle镜像,这些源可能没同步你需要的资源版本,或者和境外仓库的路径不兼容,导致下载失败。
- 代理协议不兼容:有些VPN用的WireGuard、Trojan这类协议,Gradle的网络模块可能不支持这类协议的转发,导致请求发不出去。
- 特定资源被限制:哪怕能访问普通境外网站,Google Maven、JCenter的部分节点可能被VPN路由策略排除,或者本身有访问限制,导致资源超时。
二、全局代理仅对网页生效,Android Studio/Gradle无法走代理的解决步骤
1. 给Android Studio单独配置代理
打开AS,依次点 File > Settings > Appearance & Behavior > System Settings > HTTP Proxy:
- 选「Manual proxy configuration」
- 填入你的VPN代理地址(一般是
127.0.0.1)和对应的端口号(比如1080、7890,看你VPN客户端的设置) - 点击「Apply」「OK」后重启AS,试试编译。
2. 配置Gradle全局代理(所有项目通用)
找到用户目录下的.gradle文件夹(Windows是C:\Users\[你的用户名]\.gradle,Mac是~/.gradle),新建或编辑gradle.properties文件,添加以下内容:
systemProp.http.proxyHost=127.0.0.1 systemProp.http.proxyPort=你的VPN端口号 systemProp.https.proxyHost=127.0.0.1 systemProp.https.proxyPort=你的VPN端口号 # 若VPN需要账号密码,追加下面的内容 # systemProp.http.proxyUser=你的代理用户名 # systemProp.http.proxyPassword=你的代理密码 # systemProp.https.proxyUser=你的代理用户名 # systemProp.https.proxyPassword=你的代理密码
保存后重启AS,重新执行编译任务。
3. 检查VPN的代理例外列表
有些VPN会把AS或者java.exe(Gradle基于Java运行)加入代理排除名单,打开VPN客户端的设置,看看有没有这两个程序,有的话把它们移除出例外列表。
4. 验证Gradle是否真的走了代理
在AS的Terminal里执行这条命令,看输出里有没有你配置的代理信息:
./gradlew dependencies --debug | grep "Proxy"
如果能看到代理地址,说明配置生效了;没看到的话,再检查端口、地址有没有填错。
5. 清理缓存后重试
缓存是很多问题的根源,执行以下命令清理并重新下载依赖:
- Windows:
gradlew clean build --refresh-dependencies - Mac/Linux:
./gradlew clean build --refresh-dependencies
等清理完成后再重新编译。
内容的提问来源于stack exchange,提问作者胖头鱼




