安卓网络问题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 添加以下内容:

 

Target < 28 可以和 android 6.0 一致。

你可能感兴趣的:(安卓网络问题Exception:java.lang.IncompatibleClassChangeError: Class 'org.apache.http.conn.ssl.SSLSocket...)