You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle代理隧道建立失败:企业代理下Flutter项目构建受阻

解决企业代理下Flutter项目构建的认证失败问题

这种带基础认证+自签名HTTPS证书的企业代理环境确实容易踩坑,我来帮你梳理可能漏掉的配置环节,一步步排查:

1. 先确认Flutter自身的代理配置是否跟上了

Flutter有独立的代理设置,可能没同步你给Gradle和系统做的配置:

  • 打开终端,执行这几条命令(替换成你的代理地址、端口、账号密码):
    flutter config --set http-proxy http://你的用户名:你的密码@代理地址:端口
    flutter config --set https-proxy https://你的用户名:你的密码@代理地址:端口
    
  • 划重点:如果密码里有特殊字符(比如@、!),得用URL编码替换,比如@换成%40,!换成%21,不然会被当成地址的一部分
  • 执行完后跑flutter config看看输出里的代理配置是不是正确生效了

2. 检查Gradle全局配置的细节

你已经改了~/.gradle/gradle.properties,但要确保格式完全没毛病:

  • 正确的配置应该是这样的(把占位符换成你的信息):
    # HTTP代理配置
    systemProp.http.proxyHost=代理地址
    systemProp.http.proxyPort=端口
    systemProp.http.proxyUser=你的用户名
    systemProp.http.proxyPassword=你的密码
    systemProp.http.nonProxyHosts=localhost|127.0.0.1|*.你们公司内部域名.com
    
    # HTTPS代理配置
    systemProp.https.proxyHost=代理地址
    systemProp.https.proxyPort=端口
    systemProp.https.proxyUser=你的用户名
    systemProp.https.proxyPassword=你的密码
    systemProp.https.nonProxyHosts=localhost|127.0.0.1|*.你们公司内部域名.com
    
  • 注意nonProxyHosts一定要包含你们公司内部不需要走代理的地址,比如内部Maven仓库、Git服务器这些,不然会连不上内部资源
  • 有些企业代理的HTTP和HTTPS端口不一样,别填混了!

3. 验证根证书导入是否真的成功

你已经把证书导入到Java的cacerts里,但有时候导入过程会悄咪咪出错:

  • 重新跑一遍导入命令(替换你的证书文件.crt和自定义的证书别名),输入默认密码changeit:
    keytool -import -trustcacerts -alias 自定义证书别名 -file 你的证书文件.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
    
  • 导入完验证一下证书是不是真的在里面:
    keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -alias 自定义证书别名
    
  • 要是你用的是JDK 9及以上,注意路径是$JAVA_HOME/lib/security/cacerts,没有中间的jre目录!

4. 检查项目本地的local.properties配置

有时候项目里的local.properties会覆盖全局配置,别漏了这个地方:

  • 打开Flutter项目的android/local.properties,添加代理配置:
    http.proxyHost=代理地址
    http.proxyPort=端口
    http.proxyUser=你的用户名
    http.proxyPassword=你的密码
    https.proxyHost=代理地址
    https.proxyPort=端口
    https.proxyUser=你的用户名
    https.proxyPassword=你的密码
    
  • 保存后先跑flutter clean清缓存,再试flutter run

5. 确认系统环境变量真的加载了

你在~/.profile里加了环境变量,但要确保终端已经重新读取了配置:

  • 要么重启终端,要么执行source ~/.profile,然后检查变量:
    echo $HTTP_PROXY
    echo $HTTPS_PROXY
    echo $NO_PROXY
    
  • 变量格式要对:
    export HTTP_PROXY=http://你的用户名:你的密码@代理地址:端口
    export HTTPS_PROXY=https://你的用户名:你的密码@代理地址:端口
    export NO_PROXY=localhost,127.0.0.1,*.你们公司内部域名.com
    

6. 试试关掉系统代理自动检测

你设置了java.net.useSystemProxies=true,有时候这个会和手动配置的代理打架:

  • 打开$JAVA_HOME/jre/lib/net.properties,把那行改成java.net.useSystemProxies=false
  • 重启终端后再构建项目试试

7. 确认代理的认证类型是不是基础认证

有些企业用的是NTLM认证(比如域环境),不是普通的基础认证,这时候普通的账号密码配置没用:

  • 如果是NTLM代理,得在gradle.properties里加域配置:
    systemProp.http.auth.ntlm.domain=你的公司域
    systemProp.https.auth.ntlm.domain=你的公司域
    
  • 或者可以用CNTLM做中间层:先配置CNTLM连接企业的NTLM代理,再让Flutter和Gradle连接CNTLM,这样就能绕开NTLM的认证问题

做完这些步骤后,先执行flutter clean彻底清除缓存,再运行flutter run试试。如果还是失败,把错误日志里的具体认证错误信息(比如是401 Unauthorized还是证书验证失败)贴出来,这样能更精准定位问题。

内容的提问来源于stack exchange,提问作者Nato Boram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:10:32