java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/protocol/BasicHttpContext;

問題1:Failed resolution of: Lorg/apache/http/protocol/BasicHttpContext;
回答:這個問題主要是 部分廠商 9.0系統 裁剪了org.apache.http.legacy 庫,例如華爲,
在Google官方文檔上查找到了原因,從 Android 9 開始,默認情況下該內容庫已從 bootclasspath 中移除且不可用於應用。 要繼續使用 Apache HTTP 客戶端,以 Android 9 及更高版本爲目標的應用可以向其 AndroidManifest.xml的application節點下 添加以下內容:
<uses-libraryandroid:name="org.apache.http.legacy"android:required="false"/>

其中android:required=“false” 屬性是爲了SDK 版本 在23 或更低版本的app上起作用 ,因爲在 API 級別低於 24 的設備上,org.apache.http.legacy 庫不可用。 (在這些設備上,Apache HTTP 類在 bootclasspath 中提供。)
 

從Android P開始,org.apache.http.legacy 庫將從 bootclasspath 中刪除。

Remove org.apache.http.legacy from bootclasspath

也就是進程啓動時壓根不會去加載這個jar,當你代碼中使用到這個庫中的類會拋出java.lang.ClassNotFoundException: Didn't find class ***

解決辦法:

此方法只滿足target>= 28時有效

<uses-libraryandroid:name="org.apache.http.legacy"android:required="false"/>
當然,還是建議儘早替換org.apache.http.legacy,畢竟在android 6.0時就要求替換了。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章