java.lang.AbstractMethodError:抽象方法“okio.Timeout okhttp3.Call.timeout()”

问题描述 投票:1回答:1

当我们将原生的反应从0.57.8升级到0.58.6时,我们在android上遇到了问题

我们找不到它无法找到实现的根本原因。

谢谢。

android studio的日志如下:

V / StudioProfiler:已转换类:okhttp3 / OkHttpClient W / xxxxx:当前dex文件中包含多个类。如果没有对其应用转换,则在此类上调用RetransformClasses可能会失败! D / NetworkSecurityConfig:没有指定Network Security Config,使用平台默认W / gov.nsw.servic:访问隐藏方法Lcom / android / org / conscrypt / OpenSSLSocketImpl; - > setUseSessionTickets(Z)V(浅灰名单,反射)W / gov .nsw.servic:访问隐藏方法Lcom / android / org / conscrypt / OpenSSLSocketImpl; - > setHostname(Ljava / lang / String;)V(浅灰名单,反射)访问隐藏方法Lcom / android / org / conscrypt / OpenSSLSocketImpl; - > getAlpnSelectedProtocol()[B(浅灰名单,反射)访问隐藏方法Lcom / android / org / conscrypt / OpenSSLSocketImpl; - > setAlpnProtocols([B] V(浅灰名单,反射)访问隐藏方法Ldalvik / system / CloseGuard; - >得到()Ldalvik /系统/ CloseGuard; (浅灰名单,反射)访问隐藏方法Ldalvik / system / CloseGuard; - > open(Ljava / lang / String;)V(浅灰名单,反射)访问隐藏方法Ldalvik / system / CloseGuard; - > warnIfOpen()V(light greylist,反射)D / ReactNative:ReactInstanceManager.createReactContextInBackground()ReactInstanceManager.recreateReactContextInBackgroundInner()E / AndroidRuntime:FATAL EXCEPTION:AsyncTask#2进程:xxxx,PID:8127 java.lang.RuntimeException:执行doInBackground()时发生错误android.os.AsyncTask $ 3.done(AsyncTask.java:354)at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)at java.util.concurrent.FutureTask.setException(FutureTask.java:252)at at Java.util.concurrent.FutureTask.run(FutureTask.java:271)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java: 641)at java.lang.Thread.run(Thread.java:764)引起:java.lang.Abstra ctMethodError:okhttp3.internal.ws.RealWebSocket.connect(RealWebSocket.java:190)的抽象方法“okio.Timeout okhttp3.Call.timeout()”,位于com.facebook的okhttp3.OkHttpClient.newWebSocket(OkHttpClient.java:442) .react.devsupport.InspectorPackagerConnection $ Connection.connect(InspectorPackagerConnection.java:251)位于com.facebook.react.devsupport.InspectorPackagerConnection.connect(InspectorPackagerConnection.java:52)的com.facebook.react.devsupport.DevServerHelper $ 3.doInBackground( DevServerHelper.java:230)在java.util.concurrent.FutureTask的android.os.AsyncTask $ 2.call(AsyncTask.java:333)的com.facebook.react.devsupport.DevServerHelper $ 3.doInBackground(DevServerHelper.java:222) .run(FutureTask.java:266)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)java.lang上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:641)。 Thread.run(Thread.java:764)E / AndroidRuntime:FATAL EXCEPTION:AsyncTask#1进程:xxxxx,PID:8 127 java.lang.RuntimeException:在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)上的android.os.AsyncTask $ 3.done(AsyncTask.java:354)上执行doInBackground()时发生错误.util.concurrent.FutureTask.setException(FutureTask.java:252)at java.util.concurrent.FutureTask.run(FutureTask.java:271)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)at at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:641)at java.lang.Thread.run(Thread.java:764)引起:java.lang.AbstractMethodError:抽象方法“okio.Timeout okhttp3。 Call.timeout()“at okhttp3.internal.ws.RealWebSocket.connect(RealWebSocket.java:190)at okhttp3.OkHttpClient.newWebSocket(OkHttpClient.java:442)at com.facebook.react.packagerconnection.ReconnectingWebSocket.connect(ReconnectingWebSocket) .java:77)位于com.facebook.react.devsupport.DevServe的com.facebook.react.packagerconnection.JSPackagerClient.init(JSPackagerClient.java:89) rHelper $ 1.doInBackground(DevServerHelper.java:197)位于java.的android.os.AsyncTask $ 2.call(AsyncTask.java:333)的com.facebook.react.devsupport.DevServerHelper $ 1.doInBackground(DevServerHelper.java:151)。 util.concurrent.FutureTask.run(FutureTask.java:266)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:641)在java.lang.Thread.run(Thread.java:764)I / Process:发送信号。 PID:8127 SIG:9 W / .0.2.2:8081 / ...:type = 1400 audit(0.0:777):avc:拒绝{write} for name =“perfd”dev =“dm-0”ino = 65541 scontext = u:r:untrusted_app_27:s0:c512,c768 tcontext = u:object_r:shell_data_file:s0 tclass = dir permissive = 0 type = 1400 audit(0.0:778):avc:denied {write} for name =“perfd “dev =”dm-0“ino = 65541 scontext = u:r:untrusted_app_27:s0:c512,c768 tcontext = u:object_r:shell_data_file:s0 tclass = dir permissive = 0与目标VM断开连接,地址:'localhost: 8673',运输:'插座'

react-native-android okhttp3
1个回答
2
投票

经过一些研究调查这个问题后,我发现了:

显然,当React Native程序包在创建React Native应用程序实例时使用okhttp3时,由于超时错误而导致此崩溃。

深入研究这个日志,我发现okhttp3 repo中的RealWebSocket.java:192文件引入了一个更改,清除了超时,这个更改混乱了React lib packager Connection包中的一些类,因此产生了崩溃。

请注意,此更改是在okhttp版本3.12.0提交04a74b2中引入的。这意味着低于此版本的任何版本都与React lib完全兼容。

okhttp 3.12.0 release

此外,我还发现这个更改在最近的okhttp版本3.14.0中被还原e6cfc2a带回了与React lib和okhttp的稳定交互

okhttp 3.12.0 release

我建议你不要使用okhttp 3.12.0,而是按照okhttp实现的下一个标准:

3.11.0> = okhttp> = 3.14.0

在那之后,你的应用应该像魅力一样工作。

PS。如果你的Gradle文件中有其他依赖项需要使用okhttp 1.12.0(就像我的情况一样)从它们中排除这个lib。

© www.soinside.com 2019 - 2024. All rights reserved.