代理对 Gradle 插件下载的影响是“决定性”的——尤其你在国内网络或公司内网环境时。这里把机制和坑点说清楚:
🔍 一、Gradle 插件下载到底走哪里?
当你写:
kotlin
plugins {
id("com.android.application") version "8.2.0"
}Gradle 会访问:
插件门户:
https://plugins.gradle.org实际跳转到:
- Maven Central
- Google Maven(Android)
- JCenter(历史)
👉 也就是说:插件下载 = 多仓库 + 重定向链
🚧 二、代理会带来的典型问题
1️⃣ 下载失败 / 超时
常见报错:
Read timed outCould not GET ...Connection reset
👉 原因:
- 代理未配置
- 代理不支持 HTTPS
- DNS 污染 / 被墙
2️⃣ 只配置了一半(最常见坑)
很多人只配了:
bash
HTTP_PROXY但 Gradle 实际请求是:
👉 HTTPS
所以必须:
bash
HTTPS_PROXY3️⃣ 插件和依赖走不同代理
Gradle 内部:
- 插件解析(Plugin Portal)
- 依赖下载(Maven)
👉 有时走不同路径 → 导致:
✔ 依赖能下 ❌ 插件下不了
4️⃣ Android Studio 和 Gradle 代理冲突
IDE 有自己的代理设置:
Settings → HTTP Proxy👉 但:
- IDE 代理 ≠ Gradle 代理
- Gradle daemon 不一定继承 IDE 设置
✅ 三、正确配置方式(稳定方案)
方案 A:环境变量(最稳)
bash
HTTP_PROXY=http://127.0.0.1:10810
HTTPS_PROXY=http://127.0.0.1:10810✔ 优点:
- 所有 Gradle 请求生效
- 包括插件 + 依赖
方案 B:gradle.properties(推荐补充)
properties
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10810
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10810👉 文件位置:
~/.gradle/gradle.properties方案 C:SOCKS 代理(高级)
如果你用 Clash / V2Ray:
properties
systemProp.socksProxyHost=127.0.0.1
systemProp.socksProxyPort=10808⚠️ 注意:
- SOCKS 比 HTTP 更稳定
- 但部分环境不支持
⚡ 四、国内用户建议(关键)
如果你在国内网络:
👉 代理 + 镜像 才是最优解
插件镜像(重点)
kotlin
pluginManagement {
repositories {
maven { url = uri("https://maven.aliyun.com/repository/gradle-plugin") }
gradlePluginPortal()
google()
mavenCentral()
}
}依赖镜像
kotlin
repositories {
maven { url = uri("https://maven.aliyun.com/repository/public") }
google()
mavenCentral()
}🧠 五、底层原理(你应该知道的)
Gradle 使用:
- JVM 网络栈
- Apache HTTP Client
👉 所以:
✔ systemProp.* 生效 ✔ JVM 参数生效 ✔ 环境变量生效
⚠️ 六、几个隐蔽坑(真实踩坑)
❌ 代理开了但 Gradle daemon 没重启
bash
gradle --stop❌ 证书问题(HTTPS MITM)
报错:
PKIX path building failed👉 解决:
- 导入代理证书到 JDK
❌ 本地代理挂了
Gradle 不会自动 fallback 👉 会一直卡住
✅ 结论
如果遇到插件下载问题:
👉 99% 是代理问题
最稳配置:
bash
HTTP_PROXY + HTTPS_PROXY
+ gradle.properties
+ 镜像仓库