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
相关产品推荐
相关产品推荐

