java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover
java.lang.NoSuchMethodError: okhttp3.internal.http.HttpEngine.recover
我有一个使用 ksoap 和底层 okhttp
连接的应用程序。
大部分时间它都能正常工作——但是在连接重试期间,应用程序崩溃并出现 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
方法确实存在。
我不确定如何继续调试这个问题,或者我是否做错了什么。
感谢您的帮助。
编辑:
新理论 - ksoap2-android 有 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'
并安装在一些设备上进行测试。如果这是问题,我会更新答案。
对延迟表示歉意 - 在我的 gradle 文件中恢复为 compile 'com.squareup.okhttp3:okhttp:3.2.0'
确实解决了问题。
更新到最新版本:implementation("com.squareup.okhttp3:okhttp:3.13.1")
。它对我的情况有所帮助。
我有一个使用 ksoap 和底层 okhttp
连接的应用程序。
大部分时间它都能正常工作——但是在连接重试期间,应用程序崩溃并出现 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
方法确实存在。
我不确定如何继续调试这个问题,或者我是否做错了什么。
感谢您的帮助。
编辑:
新理论 - ksoap2-android 有 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'
并安装在一些设备上进行测试。如果这是问题,我会更新答案。
对延迟表示歉意 - 在我的 gradle 文件中恢复为 compile 'com.squareup.okhttp3:okhttp:3.2.0'
确实解决了问题。
更新到最新版本:implementation("com.squareup.okhttp3:okhttp:3.13.1")
。它对我的情况有所帮助。