关于创建flutter项目启动后报错

来源:4-3 Flutter之Dart常用数据类型(数字、类型转换)

慕工程3164992

2024-12-14

图片描述

写回答

1回答

CrazyCodeBoy

2024-12-16

从错误日志来看,报错信息是:

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

这是 Java 环境的 SSL 证书问题,通常发生在尝试访问 HTTPS 资源时,JVM 无法验证目标服务器的证书路径。

原因

1. 服务器的 SSL 证书 未被当前的 Java 信任存储(cacerts 文件)识别。


2. 本地 Java 环境的证书库未包含目标服务器的根证书或中间证书。


3. 代理服务器或者网络问题导致证书验证失败。




---

解决方法

1. 下载目标服务器的证书

你需要获取目标 HTTPS 服务器的 SSL 证书。

打开浏览器访问报错中提到的 URL(通常是构建 Gradle 需要访问的 Maven 或 CDN 地址)。

在浏览器中点击证书图标,然后导出 根证书 或 服务器证书,保存为 .cer 文件。



---

2. 将证书导入到 Java 的信任库中

找到本地 JDK 安装目录下的 cacerts 文件:

<JAVA_HOME>/lib/security/cacerts

使用 keytool 命令将下载的证书导入 cacerts 信任库:

keytool -import -trustcacerts -alias your_certificate_alias -file /path/to/your_certificate.cer -keystore <JAVA_HOME>/lib/security/cacerts

your_certificate_alias: 证书的别名,可以自定义。

/path/to/your_certificate.cer: 证书文件的路径。

输入 changeit(Java 默认的 keystore 密码)完成导入。



示例:

keytool -import -trustcacerts -alias mycert -file mycert.cer -keystore $JAVA_HOME/lib/security/cacerts

执行后,确保导入成功。


---

3. 使用临时绕过(仅用于开发)

在开发环境中,如果你确定目标服务器安全,可以临时禁用 SSL 验证,但不推荐用于生产环境。

修改 build.gradle 文件,在构建阶段加入忽略 SSL 的代码:

allprojects {
    tasks.withType(JavaCompile) {
        options.forkOptions.jvmArgs += ['-Dcom.sun.net.ssl.checkRevocation=false']
    }
}

这个配置会跳过证书验证。


---

4. 检查网络代理和 SSL 拦截

如果你的网络中存在代理工具(如公司内网代理),可能会拦截 SSL 证书并替换为代理自签名证书。

确保你的网络配置正确。

在网络代理设置中导出并添加代理的根证书到 Java 信任库。



---

5. 更新 Java 和 Gradle

确保你使用的 JDK 和 Gradle 版本是最新的:

更新 Java 至 JDK 11 或更高版本。

在 android/gradle/wrapper/gradle-wrapper.properties 文件中设置 Gradle 版本:

distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip



---

最终步骤

完成上述操作后,清理项目并重新运行:

flutter clean
flutter pub get
flutter run

如果问题仍未解决,请提供你当前使用的 Gradle 版本 和目标服务器的详细 URL。

0
2
CrazyCodeBoy
回复
慕工程3164992
嗯嗯,好的。
2024-12-17
共2条回复

慕课甄选-Flutter零基础极速入门到进阶实战

全新Flutter从入门到进阶,实战仿携程网App

661 学习 · 316 问题

查看课程