# flutter 异常问题

# 1.在构建 Flutter 项目时,Gradle 或 Android SDK 访问远程仓库时发生了 SSL 握手失败

异常栈信息:

Flutter assets will be downloaded from https://storage.flutter-io.cn/. Make sure you trust this source!
Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...
Running Gradle task 'assembleDebug'...
Warning: Failed to download any source lists!
Warning: Still waiting for package manifests to be fetched remotely.
Warning: IO exception while downloading manifest:
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
	at java.base/sun.security.ssl.SSLSocketImpl.handleEOF(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.decode(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
	at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
	at com.android.sdklib.repository.legacy.remote.internal.DownloadCache.openUrl(DownloadCache.java:254)
	at com.android.sdklib.repository.legacy.remote.internal.DownloadCache.downloadAndCache(DownloadCache.java:631)
	at com.android.sdklib.repository.legacy.remote.internal.DownloadCache.openCachedUrl(DownloadCache.java:462)
	at com.android.sdklib.repository.legacy.LegacyDownloader.downloadAndStream(LegacyDownloader.java:82)
	at com.android.repository.impl.downloader.LocalFileAwareDownloader.downloadAndStream(LocalFileAwareDownloader.java:51)
	at com.android.repository.impl.manager.RemoteRepoLoaderImpl.lambda$fetchPackages$0(RemoteRepoLoaderImpl.java:137)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
	at java.base/sun.security.ssl.SSLSocketInputRecord.read(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(Unknown Source)
	at java.base/sun.security.ssl.SSLSocketInputRecord.decode(Unknown Source)
	at java.base/sun.security.ssl.SSLTransport.decode(Unknown Source)
	... 18 more

问题原因:

• - Gradle 在同步 Android SDK 组件时会调用 sdkmanager 去下载 repository2-1.xml 等清单,这一步必须访问 https:// dl.google.com/android/repository/...。日志里的 java.net.ConnectException: Connection timed out 说明 SDK 命令行工具根 本连不上 Google 仓库,所以构建一直卡在 “Still waiting for package manifests” 并最终失败。

  • 虽然项目里已经把 Maven 仓库改成阿里云镜像,但 SDK 的清单下载和 sdkmanager 依赖的是 Google 官方站点(或你手动指定的镜 像),与 Gradle 的依赖镜像是两回事;网络被墙/代理没配置好时它依旧会超时。
  • 解决办法是确保机器能访问 dl.google.com(打开代理或放行防火墙),或在 SDK 命令行工具里配置可访问的镜像/代理。例如设置 系统的 HTTP_PROXY/HTTPS_PROXY,在 %USERPROFILE%.gradle\gradle.properties 添加 systemProp.http.proxyHost/Port,并在 sdkmanager.bat --proxy=... --list 测试,或者切换到腾讯/阿里云的 SDK 镜像。
  • 一旦 sdkmanager 能成功拉到清单,再运行 flutter clean && flutter pub get && flutter run 即可正常编译。如果还有问题, 告诉我当前的网络/代理设置,我帮你写具体命令。

解决方式:

在 .gradle 找到 gradle.properties ,如果没有这个文件自行创建,添加内容:

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

具体代理地址根据实际情况修改

上次更新: 2025/11/10