useLibrary的原则和build.gradle中的编译文件('')之间有什么区别?

时间:2015-10-08 11:22:04

标签: android android-gradle android-build android-uselibrary android-apache-legacy

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')
}

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

但我徘徊为什么。

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

我很困惑。有人可以就此提供一些想法吗?提前致谢。

1 个答案:

答案 0 :(得分:9)

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

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

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