Flutter 卡在 “Initializing the flutter SDK” 半小时:Gradle 拉取 Flutter Maven 失败的排查与修复(含永久配置)
这次问题表象是:IDE/命令行一直显示 “Initializing the flutter SDK”,等待很久(半小时)都不结束;进一步执行 flutter build apk --release 直接失败。
现象与关键报错(来自构建日志)
在 flutter build apk --release 的 Gradle 阶段报错(示例):
- 任务:
:android_id:compileReleaseKotlin - 依赖:
io.flutter:flutter_embedding_release:... - 下载地址:
https://storage.googleapis.com/download.flutter.io/.../flutter_embedding_release-....pom - 错误:
Got socket exception... SSL misconfiguration+Connection reset
结论:不是 android_id 插件本身“坏了”,而是 Gradle 需要从 Flutter 的 Maven 仓库拉取产物,网络/SSL/代理导致下载失败;下载一旦失败,Flutter 工具链/Gradle 会反复重试,看起来就像 SDK 初始化卡死。
快速修复(当前终端临时生效)
在 PowerShell 里执行下面命令(只对当前窗口生效),切换到国内镜像,然后重新拉依赖并构建:
$env:PUB_HOSTED_URL="https://pub.flutter-io.cn"
$env:FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
flutter clean
flutter pub get
flutter build apk --release
这组命令解决两类下载:
PUB_HOSTED_URL:pub.dev的包下载镜像FLUTTER_STORAGE_BASE_URL:Flutter artifacts / Maven 相关下载的镜像(对应你日志里download.flutter.io这一类)
为什么 “Initializing the flutter SDK” 会卡很久
当 Flutter/Gradle 需要下载 artifacts 或 Maven 依赖时:
- 如果网络被重置/SSL 握手失败/公司代理没配置到 Java 进程
- 或者无法访问
storage.googleapis.com/storage.googleapis.com/download.flutter.io
就会出现 长时间无进度、或者 Gradle 报 “downloading artifacts from the network” 的重试信息。
永久生效怎么设置(Windows)
下面给出三种常用方式,你按团队/机器习惯选一种即可。
方案 A:写入“用户环境变量”(推荐,影响面可控)
用 PowerShell(以当前用户写入):
[Environment]::SetEnvironmentVariable("PUB_HOSTED_URL","https://pub.flutter-io.cn","User")
[Environment]::SetEnvironmentVariable("FLUTTER_STORAGE_BASE_URL","https://storage.flutter-io.cn","User")
然后 重启终端 / 重启 IDE 才会对新的进程生效。
方案 B:写入“系统环境变量”(所有用户生效,需管理员)
Start-Process powershell -Verb RunAs
在管理员窗口执行:
[Environment]::SetEnvironmentVariable("PUB_HOSTED_URL","https://pub.flutter-io.cn","Machine")
[Environment]::SetEnvironmentVariable("FLUTTER_STORAGE_BASE_URL","https://storage.flutter-io.cn","Machine")
同样需要重启终端/IDE。
方案 C:写到 PowerShell Profile(只要开 PowerShell 就自动设置)
优点:对系统环境“零侵入”,缺点:只对 PowerShell 有效(cmd/IDE 内置终端若不是 PowerShell 可能不生效)。
- 打开 profile 路径:
notepad $PROFILE
- 追加:
$env:PUB_HOSTED_URL="https://pub.flutter-io.cn"
$env:FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
保存后重新打开 PowerShell 即生效。
如果你在公司代理网络:还需要让 Gradle/Java 走代理
有一种常见情况是:浏览器能上,但 Gradle(Java)不走系统代理,依旧下载失败。
这时需要在用户目录下的 ~/.gradle/gradle.properties 配置(示例):
systemProp.http.proxyHost=你的代理host
systemProp.http.proxyPort=端口
systemProp.https.proxyHost=你的代理host
systemProp.https.proxyPort=端口
若有账号密码,再补:
systemProp.http.proxyUser=用户名
systemProp.http.proxyPassword=密码
systemProp.https.proxyUser=用户名
systemProp.https.proxyPassword=密码
额外坑:PowerShell 里的 where 命令
在 PowerShell 里,where 通常是 Where-Object 的别名,直接执行 where flutter 可能会等待管道输入而表现为“卡住”。
如果要查 flutter 路径,用:
Get-Command flutter
where.exe flutter
复验清单
- 重新执行
flutter pub get能顺利完成(不再长时间卡住) flutter build apk --release不再出现download.flutter.io的连接重置错误- 如果仍失败:优先确认代理/杀软/网络策略是否拦截了
storage.googleapis.com