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_URLpub.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 可能不生效)。

  1. 打开 profile 路径:
notepad $PROFILE
  1. 追加:
$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