Skip to content

代理对 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 out
  • Could not GET ...
  • Connection reset

👉 原因:

  • 代理未配置
  • 代理不支持 HTTPS
  • DNS 污染 / 被墙

2️⃣ 只配置了一半(最常见坑)

很多人只配了:

bash
HTTP_PROXY

但 Gradle 实际请求是:

👉 HTTPS

所以必须:

bash
HTTPS_PROXY

3️⃣ 插件和依赖走不同代理

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
+ 镜像仓库