3

Android 6.0發佈後,將刪除對Apache HTTP客戶端的支持。如果我們的應用程序使用此客戶端並且目標爲Android 2.3(API等級9)或更高,則建議使用HttpURLConnection類。據說這個API更高效,因爲它通過透明的壓縮和響應緩存來減少網絡使用,並且最大限度地降低了功耗。如果我們wonna繼續使用Apache的HTTP API S,你必須首先聲明以下編譯時依賴於我們的build.gradlë文件:build.gradle中useLibrary和編譯文件('')的原理有什麼區別?

android { 
    useLibrary 'org.apache.http.legacy' 
} 

遺留罐子是Android SDK中,其路徑是sdk/platforms/android-23/optional/ 。所以,它幾乎是獨立的。同時,這個apache遺留的jar在Android SDK中被放入optional/,那麼什麼是optional/?那是什麼意思?

此外,我們知道,我們可以把這個罐子到libs,然後宣佈它在我們build.gradle文件是這樣的:

dependencies { 
    compile files('libs/org.apache.http.legacy.jar') 
} 

這兩種方法都工作時,我測試的預期。

但我徘徊爲什麼。

useLibrarycompile files('')build.gradle之間有什麼區別?僅僅是因爲遺留的jar文件在android SDK中,所以我可以在build.gradle中聲明useLibrary來使用它?我能以這種方式使用其他jar嗎?

我很困惑。有人可以提供一些關於這方面的想法嗎?提前致謝。

回答

6

useLibrary在編譯時將庫添加到類路徑中,但不會將庫與應用程序捆綁在一起。

compile依賴關係在編譯時位於類路徑中,另外它們隨APK一起提供。

對於Apache HttpClient支持,在使用SDK 23+進行編譯時使用useLibrary。圖書館已經在目標平臺上。它只是在編譯SDK中沒有。

+0

你是什麼意思'圖書館已經在目標平臺'?如果我的'targetSDK'是23+,是這樣嗎? – SilentKnight

+0

它在預裝在設備上的庫中。 TargetSDK控制啓用了向後兼容模式,而不是安裝什麼庫。 – laalto

+0

那麼,預裝在設備上的庫和我們開發的Android SDK不是一回事嗎?你能詳細描述一下嗎? – SilentKnight