Ich habe eine Anwendung, die ksoap mit einer zugrunde liegenden okhttp
Verbindung verwendet.java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover
Die meiste Zeit funktioniert es - jedoch während eines Verbindungsversuchs stürzt die Anwendung mit einem NoSuchMethodError ab. Stack-Trace
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)
ich proguard tun verwenden, und haben hinzugefügt Regeln, so dass okhttp allein gelassen wird:
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
Meine Klasse-Datei enthält diese Abhängigkeiten:
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'
ich versucht habe, Dekompilieren der resultierenden APK und kann bestätigen, dass die okhttp3.internal.http.HttpEngine.recover
Methode existiert.
Die Quelle für die fehlende Methode ist hier: https://github.com/square/okhttp/blob/master/okhttp-urlconnection/src/main/java/okhttp3/internal/huc/HttpURLConnectionImpl.java#L495
Ich bin nicht sicher, wie dieses Problem gehen Debuggen oder ob ich etwas offensichtlich falsch gemacht haben.
Vielen Dank für Ihre Hilfe.
EDIT:
Neue Theorie - ksoap2-android hat a reference auf einen Teil der okhttp Bibliothek:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp-urlconnection</artifactId>
<version>3.2.0</version>
</dependency>
Die HttpEngine
Methode wird in der Haupt okhttp Bibliothek enthalten - es könnte sein, dass mein Verweis auf okhttp v3.3.0 liefert die HttpEngine
, die von HttpURLConnectionImpl
v3.2.0 aus der ksoap2-Bibliothek verwendet wird?
Ich habe meine okhttp-Abhängigkeit auf compile 'com.squareup.okhttp3:okhttp:3.2.0'
herabgestuft und habe auf einigen Geräten zum Testen installiert. Wenn dies das Problem ist, werde ich mit der Antwort aktualisieren.
Ja, durch Downgrading okhttp Abhängigkeit zu '' '' compile 'com.squareup.okhttp3: okhttp: 3.2.0''''' funktioniert nur. –