如何在Android Marshmallow上使用传统的Apache HTTP客户端?

76

背景

在 Android Marshmallow 上,Google 已彻底删除了对 Apache HTTP 客户端的支持 (链接 此处),因为相比替代方案,它性能不佳。

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

问题

Google 允许您仍然使用此 API,只是不作为内置的 API。只需将以下行添加到 gradle 文件中:

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"类)时,我发现它不允许我这样做。 我知道不建议使用这个解决方案,但是我们必须让应用程序准备好工作,至少在Android Marshmallow的所有应该更改的事情都100%完成之前,我们不希望出现崩溃等意外情况。这里是截图:enter image description here 问题是什么?为什么会发生这种情况?我使用它正确吗?
编辑:在这里报告了这个问题:https://code.google.com/p/android/issues/detail?id=181474

你说的“compiled fine”是指Gradle同步正常,还是在运行时出现了ClassNotFoundException? - Blackbelt
你能发布一些Android Studio的截图吗? - DevUt
@Blackbelt 我的意思是,到目前为止,我编写的那些应该被支持的类可以编译和运行得很好(因为还没有使用它们)。不会出现任何ClassNotFoundException,因为我还没有使用它们。只有当我尝试使用应该存在的类时,我才不能这样做。它不允许我这样做,也不提供我所需的导入。 - android developer
@androiddeveloper coPLaS回答对我有用,因此应将其标记为正确答案。 - Sheraz Ahmad Khilji
为了澄清useLibrary的作用:Apache HttpClient在android-23中被隐藏,但实际上并未被删除。否则,许多针对早期平台的应用程序将在M上崩溃。添加useLibrary可以将这些遗留类添加到引导类路径中,在编译时(以及运行时)基本上取消隐藏这些类。下面WenChao的评论证明了这些类已添加到引导类路径中。 - Joe Bowbeer
显示剩余10条评论
12个回答

0
如何在Android Marshmallow上使用传统的Apache HTTP客户端?
要继续在API 23+中使用Apache HTTP类:
首先,请确保将gradle依赖项添加到build.gradle文件中。
buildscript {

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

然后在您的项目的 build.gradle 中添加引用:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"
    useLibrary 'org.apache.http.legacy'
    ...
}

0
解决这个问题的简单方法是:C:\Users\username\AppData\Local\Android\sdk\platforms。在这里删除你的android-23,然后从SDK管理器中再次更新你的API 23即可解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接