Android 6.0发布后,删除了对 Apache HTTP客户端的支持。如果我们的应用使用此客户端并定位 Android 2.3(API级别9)或更高级别,则建议使用HttpURLConnection
级别。据说这个API更有效,因为它通过透明压缩和响应缓存减少了网络使用,并最大限度地降低了功耗。如果我们想继续使用 Apache HTTP API ,您必须首先在我们的build.gradl
e文件中声明以下编译时依赖项:
android {
useLibrary 'org.apache.http.legacy'
}
旧版jar位于 Android SDK 中,其路径为sdk/platforms/android-23/optional/
。所以,它几乎是独立的。同时,这个apache遗留jar被放入Android SDK的optional/
,那么optional/
是什么?这是什么意思?
我们也知道,我们可以将此jar放入libs
,然后在我们的build.gradle
文件中声明它:
dependencies {
compile files('libs/org.apache.http.legacy.jar')
}
当我测试时,这两种方法都按预期工作。
但我徘徊为什么。
useLibrary
中compile files('')
和build.gradle
之间有什么区别?只是因为遗留jar文件在android SDK中,所以我可以在useLibrary
中声明build.gradle
来使用它吗?我可以用这种方式使用其他jar
吗?
我很困惑。有人可以就此提供一些想法吗?提前致谢。
答案 0 :(得分:9)
useLibrary
在编译时将库添加到类路径中,但不会将库与应用程序捆绑在一起。
compile
依赖项在编译时位于类路径中,另外它们随APK一起提供。
对于Apache HttpClient支持,在使用SDK 23+进行编译时使用useLibrary
。该库已经存在于目标平台中。它只是在编译SDK中没有。