Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OkHttp3无法在Android上启动握手_Java_Android_Kotlin_Okhttp - Fatal编程技术网

Java OkHttp3无法在Android上启动握手

Java OkHttp3无法在Android上启动握手,java,android,kotlin,okhttp,Java,Android,Kotlin,Okhttp,我提出一个简单的请求只是为了检查我是否可以访问互联网: 返回并重试{ val request=request.Builder() .url(“https://www.google.com") .build() val响应=OkHttpClient() .newCall(请求) .execute() response.body()?.close() response.isSuccessful }捕获(e:IOException){ 假的 } 我经常会遇到java.net.SocketTimeou

我提出一个简单的请求只是为了检查我是否可以访问互联网:

返回并重试{
val request=request.Builder()
.url(“https://www.google.com")
.build()
val响应=OkHttpClient()
.newCall(请求)
.execute()
response.body()?.close()
response.isSuccessful
}捕获(e:IOException){
假的
}
我经常会遇到
java.net.SocketTimeoutException:Read timed out
catch
块。我发现OkHttp在
okhttp3.internal.connection.RealConnection
中没有深入这一行:

private void connectTls(ConnectionSpecSelector ConnectionSpecSelector)引发IOException异常{
// ...
试一试{
// ...
sslSocket.startHandshake();//永远不会转到下一行
// ...
}捕获(断言错误){
//从不到这里来
}最后{
//去这里
}
}
我不知道在
sslSocket.startHandshake()
中会发生什么,因为显然
sslSocket
com.android.org.conscrypt.ConscryptEngineSocket
,android并不想让我看到它是如何工作的。 是某种错误还是我做错了什么?是否有修复方法或至少有解决方法

日志:

我使用Android 11(API 30)和OkHttp3 v3.12.0


另外,我记得,我无法将OkHttp更新到更新的版本,因为我有另一个依赖于此特定版本的OkHttp的依赖项,因为更新的版本向后不兼容。

似乎您的okhttp3库版本通过反射访问任何内部受限(由新的android版本)类

下面介绍了如何符合要求以及如何为您找到最合适的解决方案:

或者


一个快速的解决办法是将“android构建工具”版本降低到一个尚未实施此类限制的版本。这是一个小黑客,以避免限制新的android版本。但是要小心,因为playmarket不会接受使用太旧的“构建工具”编译的应用程序,所以它不是一个持久的解决方案。

您的okhttp3库版本似乎可以通过反射访问任何内部受限(由新的android版本)类

下面介绍了如何符合要求以及如何为您找到最合适的解决方案:

或者


一个快速的解决办法是将“android构建工具”版本降低到一个尚未实施此类限制的版本。这是一个小黑客,以避免限制新的android版本。但是要小心,因为playmarket不会接受使用太旧的“构建工具”编译的应用程序,所以它不是一个持久的解决方案。

升级到OkHttp3 v3.12.12,这已经修复


请参阅升级到OkHttp3 v3.12.12,此问题已修复


请参见

它在android 10、9或8上运行?
buildToolsVersion'29.0.3'
,因此它也应该在android 10上运行,但在我写这个问题几个小时后,它甚至停止在android 11上复制。猜猜,这次它没去那里。现在我没有时间尝试解决这个问题,但我可能会稍后再讨论。它在Android 10上不起作用,但在Android 7上起作用。然后检查我的答案,如果您需要快速解决方案,请尝试将buildtools版本降低到Android 7 Current
CompiledkVersion
is
29
,因此,如果我想将
buildToolsVersion
更改为较旧的版本,如
28.0.3
,我也需要将
compileSdkVersion
更改为
28
。这有点问题。它在android 10、9或8上运行?
buildToolsVersion'29.0.3'
,所以它也应该在android 10上运行,但在我写这个问题几个小时后,它甚至停止在android 11上复制。猜猜,这次它没去那里。现在我没有时间尝试解决这个问题,但我可能会稍后再讨论。它在Android 10上不起作用,但在Android 7上起作用。然后检查我的答案,如果您需要快速解决方案,请尝试将buildtools版本降低到Android 7 Current
CompiledkVersion
is
29
,因此,如果我想将
buildToolsVersion
更改为较旧的版本,如
28.0.3
,我也需要将
compileSdkVersion
更改为
28
。这有点问题。不幸的是,我无法更新到
3.13.0
,并且
3.12.12
无法解决此问题。不过,它不再记录这些反射错误。不幸的是,我无法更新到
3.13.0
,而
3.12.12
也无法解决此问题。不过,它不再记录这些反射错误。
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)