如何在Android Marshmallow上使用旧版Apache HTTP客户端?

发布于 2021-02-02 22:49:49

背景

在Android Marshmallow上,Google已完全删除了对Apache HTTP客户端的支持(链接此处),因为与其他替代品相比,它的性能不佳。

这也可能是导致Android Marshmallow上许多应用程序崩溃的原因。

问题

通过将以下行添加到gradle文件中,Google允许你仍然使用此API,而不是内置API:

useLibrary 'org.apache.http.legacy'

所以,这就是我所做的:

dependencies {
    classpath 'com.android.tools.build:gradle:1.3.0'
}

和:

android {
    compileSdkVersion 'android-MNC'
    buildToolsVersion "23.0.0 rc3"
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        applicationId "com.example.user.androidmtest"
        minSdkVersion 'MNC'
        targetSdkVersion 'MNC'
        versionCode 1
        versionName "1.0"
    }

当我尝试它时,它可以很好地编译(没有错误显示,并且我可以运行概念验证应用程序,因为它没有任何特殊的代码),但是当我尝试使用一些我知道的类时,是旧版API(例如“ HttpClient”类)的一部分,我发现它不允许我这样做。

我知道不建议你使用此解决方案,但我们必须至少暂时准备好该应用程序,直到我们100%应对Android Marshmallow应当更改的所有事情,并且我们不希望出现意外情况崩溃的形式。

关注者
0
被浏览
239
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    Android Studio抱怨org.apache.http

    org.apache.http.NameValuePair
    org.apache.http.client.utils.URLEncodedUtils
    

    不见了。

    所以我org.apache.http.legacy.jarAndroid/Sdk/platforms/android-23/optional文件夹中添加了app/libs

    我也将此行添加到我的app.gradle文件中

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

    但是,如果你使用更多的库,则可以使用这种方式

    compile fileTree(dir: 'libs', include: ['*.jar'])
    

    这解决了我所有由于Google删除了对Apache HTTP客户端的支持而导致的错误。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看