問題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時就要求替換了。