安卓网络问题Exception:java.lang.IncompatibleClassChangeError: Class 'org.apache.http.conn.ssl.SSLSocket...

今天集成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 一致。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容