解决Android、Flutter编译时Gradle报错:javax.net.ssl.SSLException: Connection reset

简介: 解决Android、Flutter编译时Gradle报错:javax.net.ssl.SSLException: Connection reset

出现场景

运行一个很老的Android或者Flutter项目时,遇到以下错误。

Launching lib/main.dart on SM G9209 in debug mode...
Running Gradle task 'assembleDebug'...
Exception in thread "main" javax.net.ssl.SSLException: Connection reset
  at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127)
  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.SSLTransport.decode(SSLTransport.java:144)
  at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1418)
  at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1324)
  at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:440)
  at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:411)
  at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
  at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197)
  at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1592)
  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)
  Suppressed: java.net.SocketException: Broken pipe (Write failed)
    at java.base/java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110)
    at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)
    at java.base/sun.security.ssl.SSLSocketOutputRecord.encodeAlert(SSLSocketOutputRecord.java:81)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:380)
    ... 20 more
Caused by: java.net.SocketException: Connection reset
  at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186)
  at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
  at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478)
  at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472)
  at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:160)
  at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:110)
  ... 17 more
[!] Gradle threw an error while downloading artifacts from the network.

我们只需要关注最后一句话:

Gradle threw an error while downloading artifacts from the network.

根据提示,是因为Android项目在构建阶段会去Gradle官网下载gradle/wrapper目录中指定的Gradle版本。

解决方案

有两种方法。

替换Gradle地址(推荐)

打开Android项目目录中的gradle/wrapper/gradle-wrapper.properties.

修改distributionUrl后的地址为国内Gradle镜像地址。

腾讯云Gradle镜像:https://mirrors.cloud.tencent.com/gradle/ 加上版本号。

#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-7.2-all.zip

手动下载

先去Gradle官网下载对应版本Gradle(下载地址)。

找到对应的版本后下载到本地。放在.gradle/wrapper/dists/,然后解压。


重新编译项目完成。  

相关文章
|
3月前
|
Java 关系型数据库 MySQL
记录解决一个小错误:Establishing SSL connection without server‘s identity verification is not recommended
本文记录了解决Spring Boot连接MySQL时出现的SSL连接警告问题的步骤,通过在数据源配置中添加`useSSL=false`来禁用SSL连接。
|
2月前
|
Android开发
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
Android基于gradle task检查各个module之间资源文件冲突情况
|
4月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
332 1
|
2月前
|
Android开发
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
Android gradle task任务检查各个module之间资源文件冲突.md
|
2月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
33 1
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
112 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
2月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
110 0
玩转安卓之配置gradle-8.2.1
|
4月前
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version

热门文章

最新文章