7

在 Android 6.0 版本之后,对Apache HTTP 客户端的支持被移除。如果我们的应用正在使用此客户端并针对Android 2.3(API 级别 9)或更高版本HttpURLConnection则建议使用 class。据说这个 API 更高效,因为它通过透明压缩和响应缓存减少了网络使用,并最大限度地降低了功耗。如果我们想继续使用Apache HTTP API,首先必须在我们的build.gradle 文件中声明如下编译时依赖:

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

遗留 jar 在Android SDK中,其路径为sdk/platforms/android-23/optional/. 所以,它几乎是独立的。同时,这个 apache legacy jar 被放入optional/Android SDK 中,那是optional/什么?这意味着什么?

我们也知道,我们可以将这个 jar 放入libs,然后在我们的build.gradle文件中声明它,如下所示:

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

当我测试时,这两种方法都按预期工作。

但为什么?

useLibraryin和compile files('')in和有什么不一样build.gradle?只是因为遗留的 jar 文件在 android SDK 中,所以我可以声明useLibrary使用build.gradle它?我可以以这种方式使用其他罐子吗?

有人可以提供一些关于这个的想法吗?

4

1 回答 1

12

useLibrary编译时将库添加到类路径,但不将库与应用程序捆绑在一起。

compile依赖项在编译时位于类路径中,另外它们随您的 APK 一起提供。

对于 Apache HttpClient 支持,useLibrary在使用 SDK 23+ 进行编译时使用。该库已经存在于目标平台中。它只是在编译 SDK 中不存在。

于 2015-10-08T11:35:38.260 回答