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

Flutter Android模拟器运行报SSLHandshakeException PKIX路径构建失败

Flutter Android端构建报SSL握手证书路径校验失败问题

问题描述

Flutter默认应用在Web端运行正常,在Android模拟器上运行时报错,尝试检索到的公开方案后均未解决问题。
运行环境:Windows 10,Android模拟器为Pixel XL API 30,同环境下非Flutter原生Android项目可正常在该模拟器运行。

已尝试的无效方案

  • 方案1:切换至手机移动网络
  • 方案2:修改gradle-wrapper.properties配置文件中的distributionUrl地址,将https替换为http,配置如下:
distributionUrl=http\://services.gradle.org/distributions/gradle-7.4-all.zip
  • 方案3:下载jcenter站点的SSL证书并添加到Java信任库
  • 方案4:在gradle.properties配置文件中添加信任库配置:
systemProp.javax.net.ssl.trustStore=[PATH_TO_TRUST_STORE]
systemProp.javax.net.ssl.trustStorePassword=[PASSWORD] (changeit)

错误堆栈

Exception in thread "main" javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:349)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:292)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:287)
    at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1357)
    at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(CertificateMessage.java:1232)
    at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(CertificateMessage.java:1175)
    at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:443)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:421)
    at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:182)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1426)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1336)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:450)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:421)
    at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:572)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.followRedirect0(HttpURLConnection.java:2787)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2699)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1854)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:250)
    at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
    at org.gradle.wrapper.Download.download(Download.java:44)
    at org.gradle.wrapper.Install$1.call(Install.java:61)
    at org.gradle.wrapper.Install$1.call(Install.java:48)
    at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
    at org.gradle.wrapper.Install.createDist(Install.java:48)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)

可行解决方案

错误发生在Gradle Wrapper启动阶段下载Gradle发行包的环节,和Flutter代码、模拟器配置无关。此前方案无效的核心原因是证书导入了错误的Java运行环境,或Gradle强制HTTPS跳转导致http配置失效,按以下步骤操作:

  1. 定位Flutter实际使用的JDK路径
    终端执行flutter doctor -v,找到输出项Java binary at:对应的JRE目录,此前导入证书若操作的是自行安装的其他JDK,不会对Flutter构建生效。
  2. 跳过Gradle在线下载步骤
    手动下载gradle-7.4-all.zip压缩包,放到Windows本地Gradle缓存路径:C:\Users\[当前系统用户名]\.gradle\wrapper\dists\gradle-7.4-all\[随机命名的子目录]\,压缩包无需解压,Gradle Wrapper检测到本地存在匹配版本的安装包时会直接加载,完全跳过网络下载环节,从根源避免SSL握手错误。
  3. 修正依赖源配置
    打开项目下android/build.gradle文件,将repositories块中已停止服务的jcenter源替换为国内可正常访问的公共maven源,避免后续依赖下载阶段出现同类证书问题。
  4. 清理缓存重新构建
    依次执行flutter clean、flutter pub get,再执行flutter run即可正常启动项目。

如果操作后仍有报错,直接用Android Studio打开项目的android子目录,等待Gradle自动同步完成后,再回到终端执行Flutter运行命令,Android Studio会自动完成Gradle环境适配。


内容的提问来源于stack exchange,提问作者Akanksha Saini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:18:20