Flutter 构建 APK 失败?其实是我被代理坑了…… java.net.ConnectException: Connection refused

在这里插入图片描述

今天来聊一件让我差点暴走的 Flutter 构建经历。事情是这样的——


🔥 坑爹经历:换了代理,APK 构建一直报错

最近公司人员离职,让我交接了工作。打开他mac电脑后,打开Android Studio,然后在终端里执行:

flutter build apk

它就像生气的小猫一样,不停吐着网络连接错误:

✗ flutter build apk
Exception in thread "main" java.net.ConnectException: Connection refused
        at java.base/sun.nio.ch.Net.connect0(Native Method)
        at java.base/sun.nio.ch.Net.connect(Unknown Source)
        at java.base/sun.nio.ch.Net.connect(Unknown Source)
        at java.base/sun.nio.ch.NioSocketImpl.connect(Unknown Source)
        at java.base/java.net.Socket.connect(Unknown Source)
        at java.base/java.net.Socket.connect(Unknown Source)
        at java.base/sun.net.NetworkClient.doConnect(Unknown Source)
        at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
        at java.base/sun.net.www.http.HttpClient$1.run(Unknown Source)
        at java.base/sun.net.www.http.HttpClient$1.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at java.base/sun.net.www.http.HttpClient.privilegedOpenServer(Unknown Source)
        at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
        at java.base/sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
        at java.base/sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
        at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
        at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
        at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
        at org.gradle.wrapper.Download.download(Download.java:44)
        at org.gradle.wrapper.Install$1.call(Install.java:61)
        at org.gradle.wrapper.Install$1.call(Install.java:48)
        at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
        at org.gradle.wrapper.Install.createDist(Install.java:48)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Running Gradle task 'assembleRelease'...                           201ms
Gradle task assembleRelease failed with exit code 1

我整个人都傻了…… 😭,觉得可能是代理问题,于是用了我自己的代理,然后在 Android Studio → Settings → Proxy 那边设置了代理,终端也运行了:export https_proxy=http://127.0.0.1:33210 http_proxy=http://127.0.0.1:33210 all_proxy=socks5://127.0.0.1:33210
可是依然报一样的错误…😭😭

接着就是各种谷歌,各种问ai,又在 Android Studio → Help → Edit Custom VM Options 里添加了代理,又在android/.gradle/gradle.properties也设置了代理。

重启 Android Studio,一切看似正常……

但是当我再次运行flutter build apk时,还是一样。。。要抓狂了😫😫😫


🕵️‍♂️ 排查原因:原来是上一个人的“遗产”

经过一番搜索和排查,发现问题根源在这里:

~/.gradle/gradle.properties

我打开一看——卧槽!上一个人设置了全局代理,而且还是旧的端口!
我换了新的代理,但 Gradle 优先读取了 全局配置,导致一直访问不到网络。

我当时的心情大概是这样的:

“代理你妹啊……明明换了,你还在捣乱!”


💡 解决方案:清理旧配置,正确设置代理

经过一番摸索,我终于整理出 Flutter/Gradle 正确代理设置方法


1️⃣ 清理全局旧代理(重点!)

编辑或删除:

~/.gradle/gradle.properties

如果里面有老代理配置,删掉或注释掉:

# systemProp.http.proxyHost=192.168.1.100
# systemProp.http.proxyPort=8888
# systemProp.https.proxyHost=192.168.1.100
# systemProp.https.proxyPort=8888

2️⃣ 项目级代理(推荐)

在项目目录下的:

<your_flutter_project>/android/gradle.properties

添加你的新代理:

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=33210
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=33210

# 如果有用户名密码
# systemProp.http.proxyUser=your_user
# systemProp.http.proxyPassword=your_pass
# systemProp.https.proxyUser=your_user
# systemProp.https.proxyPassword=your_pass

Gradle 会优先读取项目级配置,这样就不会被旧代理坑。


3️⃣ Flutter / Dart 命令行代理

在终端设置环境变量(临时生效):

Linux / macOS

export HTTP_PROXY=http://127.0.0.1:33210
export HTTPS_PROXY=http://127.0.0.1:33210

Windows PowerShell

setx HTTP_PROXY "http://127.0.0.1:33210"
setx HTTPS_PROXY "http://127.0.0.1:33210"

4️⃣ 测试构建

终于,敲下:

flutter build apk -v

依赖能正常下载,Gradle 构建顺利完成,APK 生成成功!
我差点要在办公室开香槟了 🎉。

模拟终端截图:

Running Gradle task 'assembleRelease'...
✓ Built build/app/outputs/flutter-apk/app-release.apk (21.2MB).

✅ 总结:Flutter 构建 APK 代理小贴士

  1. Android Studio VM Options 只影响 IDE 内部,不影响命令行 Flutter 构建。
  2. 全局 Gradle 配置容易被旧代理坑,优先清理。
  3. 项目级 gradle.properties 是最靠谱的 Gradle 代理设置方式。
  4. Flutter / Dart 环境变量确保命令行下载依赖正常。

💡 小提醒:
每次换代理环境,先检查 ~/.gradle/gradle.properties,不要让前人的“遗产”拖你后腿。
不然你就会像我一样,差点被一串奇怪的网络错误逼疯……😂

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐