美文网首页
安卓网络问题Exception:java.lang.Incomp

安卓网络问题Exception:java.lang.Incomp

作者: lirudong | 来源:发表于2020-07-03 16:34 被阅读0次

今天集成sdk,里面的网络通信报错

Exception:java.lang.IncompatibleClassChangeError: Class 'org.apache.http.conn.ssl.SSLSocketFactory' does not implement interface 
'org.apache.http.conn.scheme.SchemeSocketFactory' in call to 
'java.net.Socket org.apache.http.conn.scheme.SchemeSocketFactory.createSocket 
(org.apache.http.params.HttpParams)' (declaration of 'org.apache.http.impl.conn.DefaultClientConnectionOperator' 
appears in /data/app/com.xxx.k-08Q3kCfJ6ZkZBXkFyOF4og==/base.apk!classes3.dex)

一番查找后发现:
Apache HTTP 客户端弃用影响采用非标准 ClassLoader 的应用

其实,自 Android 6 发布,就移除了对 Apache HTTP 客户端的支持,而推荐改用 HttpURLConnection 类,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量, 从此我们变习惯这样使用 Apache HTTP API,即在 build.geadle 添加:

android {
    useLibrary 'org.apache.http.legacy'
}

androd P 开始,默认情况下该内容库已从 bootclasspath 中移除且不可用于应用。
这句话怎么理解,也就是说默认 Apache HTTP API 不可用,即使在build.geadle申明了该库。
这种说法分两种情况: 运行在 android P 设备上的应用:

Target 28 ,默认会报 NoClassDefFoundError,因为此库被禁止使用,要继续使用 Apache HTTP 客户端,以 Android 9 及更高版本为目标的应用可以向其 AndroidManifest.xml 添加以下内容:

 <uses-library 
    android:name="org.apache.http.legacy" 
    android:required="false"/>

Target < 28 可以和 android 6.0 一致。

相关文章

网友评论

      本文标题:安卓网络问题Exception:java.lang.Incomp

      本文链接:https://www.haomeiwen.com/subject/rrnsqktx.html