java.lang.Abstractmethod error: абстрактный метод «okio.Тайм-аут okhttp3.Call.timeout()»

#react-native-android #okhttp3

#react-native #okhttp

Вопрос:

Когда мы обновляем react native с 0.57.8 до 0.58.6, мы сталкиваемся с проблемой на Android

мы не смогли найти основную причину, по которой он не смог найти реализацию.

Спасибо.

Журнал из android Studio выглядит следующим образом:

V / StudioProfiler: Преобразованный класс: okhttp3/OkHttpClient W / xxxxx: в текущем файле dex содержится более одного класса. Вызов RetransformClasses для этого класса может завершиться неудачей, если к нему не будут применены преобразования! D/NetworkSecurityConfig: конфигурация сетевой безопасности не указана, используется платформа по умолчанию W /gov.nsw.servic: доступ к скрытому методу Lcom/android/org/conscrypt/OpenSSLSocketImpl;->setUseSessionTickets(Z) V (светло-серый список, отражение) W / gov.nsw.servic: доступ к скрытому методу Lcom/android /org /conscrypt/ OpenSSLSocketImpl;->Установить имя хоста(Ljava/lang/String;)V (светло-серый список, отражение) Доступ к скрытому методу Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B (светло-серый список, отражение) Доступ к скрытому методу Lcom/ android /org /conscrypt/OpenSSLSocketImpl;->setAlpnProtocols([B) V (светло-серый список, отражение) Доступ к скрытому методу Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; (светло-серый список, отражение) Доступ к скрытому методу Ldalvik/system/CloseGuard;-> открыть(Ljava /lang/String;)V (светло-серый список, отражение) Обращается к скрытому методу Ldalvik/system/CloseGuard;->warnIfOpen()V (светло-серый список, отражение) D/ ReactNative: ReactInstanceManager.createReactContextInBackground() ReactInstanceManager.recreateReactContextInBackgroundInner() E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask #2 Process: xxxx, PID: 8127 java.lang.RuntimeException: Произошла ошибка при выполнении doInBackground() в android.os.AsyncTask $3.выполнено(AsyncTask.java:354) на java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) в java.util.concurrent.Исключение FutureTask.setException(FutureTask.java:252) в 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) на java.lang.Thread.run(Thread.java:764) Вызван: java.lang.Abstractmethod error: абстрактный метод «okio.Тайм-аут okhttp3.Call.timeout()» в okhttp3.internal.ws.RealWebSocket.connect(RealWebSocket.java:190) в okhttp3.OkHttpClient.newWebSocket(OkHttpClient.java:442) на facebook.react.devsupport.InspectorPackagerConnection$Connection.connect(InspectorPackagerConnection.java:251) на facebook.react.devsupport.Пакет инспектората подключения.connect (InspectorPackagerConnection.java:52) на com.facebook.react.devsupport.DevServerHelper$3.facebook.react.devsupport.java:230) на com.facebook.react.devsupport.DevServerHelper$3.doInBackground(DevServerHelper.java: 222) в android.os.AsyncTask$2.вызов(AsyncTask.java:333) в java.util.concurrent.FutureTask.run(FutureTask.java:266) на java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) на java.lang.Поток.run(Thread.java:764) E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask #1 Процесс: xxxxx, PID: 8127 исключение java.lang.RuntimeException: произошла ошибка при выполнении doInBackground() в android.os.AsyncTask $3.выполнено(AsyncTask.java:354) на java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) в java.util.concurrent.Исключение FutureTask.setException(FutureTask.java:252) в 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) на java.lang.Thread.run(Thread.java:764), вызванный: java.lang.Abstractmethod error: абстрактный метод «okio.Тайм-аут okhttp3.Call.timeout()» в okhttp3.internal.ws.RealWebSocket.connect(RealWebSocket.java:190) в okhttp3.OkHttpClient.newWebSocket(OkHttpClient.java:442) на facebook.react.packagerconnection.Повторное подключение WebSocket.connect (повторное подключение WebSocket.java:77) на com.facebook.react.packagerconnection.JSPackagerClient.init(JSPackagerClient.java: 89) на com.facebook.react.devsupport.DevServerHelper$1.doInBackground(DevServerHelper.java:197) на facebook.react.devsupport.DevServerHelper $1.doInBackground(DevServerHelper.java:151 ) в android.os.AsyncTask$2.вызов(AsyncTask.java:333) в java.util.concurrent.FutureTask.run(FutureTask.java:266) на java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) на java.lang.Поток.run(Thread.java:764) I/ Process: отправка сигнала. PID: 8127 Сигнал: 9 Вт/.0.2.2:8081/…: тип =1400 аудит (0.0:777): avc: отказано в { записи } для name=»perfd» dev=»dm-0″ ino= 65541 scontext=u: r: ненадежное приложение 27:s0:c512,c768 tcontext=u: object_r:shell_data_file:s0 tclass=dir разрешающий=0 тип=1400 проверок (0.0:778): avc: отказано в { записи } для name=»perfd» dev=»dm-0″ ino= 65541 scontext=u: r: ненадежное приложение 27:s0:c512,c768 tcontext=u: object_r: shell_data_file: s0 tclass= разрешенный каталог = 0 Отключен от целевая виртуальная машина, адрес: ‘localhost: 8673’, транспорт: ‘socket’

Комментарии:

1. Я имею дело с аналогичной проблемой, какую версию okhttp реализует ваше приложение для Android?

2. Версия okhttp равна 3.12.1, что соответствует версии в react native 0.58.6

Ответ №1:

После некоторых исследований по изучению этой проблемы вот что я выяснил:

По-видимому, этот сбой вызван ошибкой тайм-аута, когда пакет React Native использует okhttp3 к моменту создания экземпляра приложения React Native.

Углубившись в этот журнал, я обнаружил, что файл RealWebSocket.java:192 в репозитории okhttp3 внес изменение, которое устраняет время ожидания, это изменение нарушает работу некоторых классов внутри пакета подключения React lib packager и, следовательно, приводит к сбою.

Обратите внимание, что это изменение было внесено в фиксацию 04a74b2 okhttp версии 3.12.0. Это означает, что любая версия ниже этой полностью совместима с React lib.

выпуск okhttp 3.12.0

Кроме того, я также обнаружил, что это изменение было отменено в самой последней версии okhttp 3.14.0, зафиксированной e6cfc2a, в результате чего было восстановлено стабильное взаимодействие с React lib и okhttp

выпуск okhttp 3.12.0

Я бы рекомендовал вам не использовать okhttp 3.12.0 и вместо этого следовать следующим критериям для вашей реализации okhttp:

3.11.0>= okhttp >=3.14.0

После этого ваше приложение должно работать как по маслу.

PS. Если у вас в вашем файле Gradle есть другие зависимости, которые требовали использования okhttp 1.12.0 (как в моем случае), исключите из них эту библиотеку.

Комментарии:

1. Ваше решение работает. Большое вам спасибо! Но у меня все еще есть вопрос, почему проблема возникла только у нас. Это должно быть популярной проблемой, если она вызвана зависимостью в react-native