android 6.0 SDK中刪除HttpClient的相關類的解決方法


一、出現的情況

在eclipse或 android studio開發,

設置android SDK的編譯版本為23時,且使用了httpClient相關類的庫項目:如android-async-http等等,會出現有一些類找不到的錯誤。

二、原因

android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留幾個類).

三、解決方法

1.eclipse:

libs中加入
org.apache.http.legacy.jar
上面的jar包在:**\android-sdk-windows\platforms\android-23\optional下(需要下載android 6.0的SDK)

2.android studio:
在相應的module下的build.gradle中加入:
android {
    useLibrary 'org.apache.http.legacy'
}
注意放置的位置:是在android {}中
可以參考:

https://developer.Android.com/preview/behavior-changes.html

四.谷歌和阿帕奇的愛恨情仇

初,谷歌安卓新出,庫中自帶HttpClient 4.0測試預覽版。為與安卓保持API同步,HTTPClient不敢大動大改。后來,HTTPClient 4.0漸趨成熟,apache欲使android跟進更新對應的庫,android拒絕之。然舊庫bug叢生,瑕疵遍地。故今apache新出一個HTTPClient for android。 

你說,既然android自帶的不好(有些舊),為啥不直接導入apache的呢?因為包名是一樣的,庫沖突。不是不能解決,也能,麻煩。從apache下載最新的httpclient源碼,把每個源文件包名改了,改成跟android不沖突的。然后打包成jar文件,然后導入到android工程的lib里。 

五.回歸平靜

現在,android 6.0已經移除了httpClient,於是世界又恢復了平靜。我們可以從apache下載httpClient,然后導入到lib中,不用改名了。

直接使用httpclient很好,apache的httpclient也有相對應的異步請求組件HttpAsyncClient。因為android不允許在UI線程中進行網絡請求,所以我們只得通過回調函數(鈎子函數)來進行請求結果處理。除了使用apache的httpclient,更好的方式是使用loopj.android.AsyncHttpClient

六. AsyncHttpClient到底基於誰

loopj.android.AsyncHttpClient是James Smith基於httpClient封裝的用於android的網絡請求包,一開始,它當然是對android自帶的httpClient進行封裝(也就是apache的);然后apache的httpClient發生了很大改變,loopj要跟誰走?是跟着google繼續保守,還是跟上apache更新的步伐?它選擇了跟apache走,可是不能直接使用apache的httpClient呀!因為android中自帶httpClient,包名沖突啊!所以就改成了cz.msebera.android.httpclient。經常用到的是:

      import cz.msebera.android.httpclient.Header

loopj官網上的要比github上更新慢!今天更新了一下loopj.android.httpClient,發現cz.msebera.android用不了了,於是換成apache 的httpClient,能用了。

於是,一切終歸平靜。

簡而言之,谷歌的android不在自帶apache的httpClient,而是把選擇權交給程序員。loopj.android.AsyncHttpClient不在無所適從,可以放心的基於apache的httpClient而不用在改包名了。

所以,作為一個獨立的組織,不要輕易包含別的組織的東西。因為你一旦包含了,那就沒法做到跟人家同步更新!人家是專門干這個活的,你們兩個更新步伐不一致,那會很坑的呀。如果必須要使用到別的組織的東西,那就屬於依賴,那是另外一回事了。比如ubuntu中sudo apt install eclipse,那eclipse版本不是最新版的,很多bug都未曾修復。像這種明明可以不包含,卻非要包含然后又不與人家同步的情況真是不該。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM