У меня есть приложение, которое использует ksoap с базовым соединением okhttp
.java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover
Большая часть времени, когда он работает, однако во время повторной попытки подключения приложение выходит из строя с помощью NoSuchMethodError. Стек след ниже
Fatal Exception: java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover
at okhttp3.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:493)
at okhttp3.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at okhttp3.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:261)
at org.ksoap2.transport.OkHttpServiceConnectionSE.openOutputStream(OkHttpServiceConnectionSE.java:124)
at org.ksoap2.transport.HttpTransportSE.sendData(HttpTransportSE.java:292)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:184)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113)
at uk.org.xibo.xmds.CheckConnection.run(CheckConnection.java:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Я использую ProGuard, и добавили правила, чтобы okhttp осталась одна:
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
Мой файл класса содержит следующие зависимости:
compile 'com.squareup.okio:okio:1.8.0'
compile 'com.squareup.okhttp3:okhttp:3.3.0'
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'
Я пробовал декомпилировать полученный APK и подтвердить, что метод okhttp3.internal.http.HttpEngine.recover
существует.
Источник пропавшей метод здесь: https://github.com/square/okhttp/blob/master/okhttp-urlconnection/src/main/java/okhttp3/internal/huc/HttpURLConnectionImpl.java#L495
Я не знаю, как продолжить отладку этот вопрос, или я сделал что-то явно не так.
Спасибо за любую помощь.
EDIT:
Новая теория - ksoap2-андроид имеет a reference к части okhttp библиотеки:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp-urlconnection</artifactId>
<version>3.2.0</version>
</dependency>
Метод HttpEngine
содержится в главной библиотеке okhttp - может быть, my ссылка на okhttp v3.3.0 предоставляет HttpEngine
, который используется HttpURLConnectionImpl
v3.2.0 из библиотеки ksoap2?
Я понизил мою зависимость okhttp до compile 'com.squareup.okhttp3:okhttp:3.2.0'
и установил на несколько устройств для тестирования. Если это проблема, я обновлю ответ.
Да, путем снижения зависимости okhttp к '' '' 'compile 'com.squareup.okhttp3: okhttp: 3.2.0''''' работает только. –