build.gradle中useLibrary和compile files('')的原理有什么区别?

What's the difference between principles of useLibrary and compile files('') in build.gradle?

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

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

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

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

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

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

但是为什么呢?

build.gradle中的useLibrarycompile files('')有什么区别?只是因为遗留 jar 文件在 android SDK 中,所以我可以在 build.gradle 中声明 useLibrary 来使用它?我可以这样使用其他罐子吗?

有人可以对此提供一些想法吗?

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

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

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