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

Sil*_*ght 5 android android-build android-gradle-plugin android-apache-legacy android-uselibrary

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

android {
    useLibrary 'org.apache.http.legacy'
}
Run Code Online (Sandbox Code Playgroud)

旧版jar在Android SDK中,其路径为sdk/platforms/android-23/optional/.所以,它几乎是独立的.同时,这个apache传统jar是optional/在Android SDK中推出的,那么它是什么optional/?那是什么意思?

我们也知道,我们可以把这个jar放进去libs,然后在我们的build.gradle文件中声明它:

dependencies {
    compile files('libs/org.apache.http.legacy.jar')
}
Run Code Online (Sandbox Code Playgroud)

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

但我为什么徘徊.

什么之间的区别useLibrary,并compile files('')build.gradle?只是由于传统的jar文件采用的是Android SDK,所以我可以声明useLibrarybuild.gradle使用它?我可以用HttpURLConnection这种方式使用其他的吗?

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

laa*_*lto 9

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

compile 依赖关系在编译时在类路径中,另外它们随APK一起提供.

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

  • 如果你看看你编译的SDK android.jar,它只是存根抛出异常.它在运行时环境中并不相同. (2认同)