美文网首页
安卓网络问题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