97

正如这里提到的,Android M 将不支持 Apache HTTP API。文档声明:

改用 HttpURLConnection 类。

或者

要继续使用 Apache HTTP API,您必须首先在 build.gradle 文件中声明以下编译时依赖项:

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

我已经将项目中对 HttpClient 的大部分使用转换为 HttpURLConnection,但是,我仍然需要在一些领域使用 HttpClient。因此,我试图将 'org.apache.http.legacy' 声明为编译时依赖项,但在 build.gradle 中出现错误:

找不到 Gradle DSL 方法:'useLibrary()'

我的问题是:如何在我的项目中将 'org.apache.http.legacy' 声明为编译时依赖项?

任何帮助深表感谢。谢谢

4

11 回答 11

173

对于 API 23:

顶级 build.gradle - /build.gradle

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

特定于模块的 build.gradle - /app/build.gradle

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

官方文档(虽然预览):http: //developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client

最新的 android gradle 插件更新日志:http ://tools.android.com/tech-docs/new-build-system

于 2015-08-20T02:14:58.000 回答
28

另一种选择是只添加 jbundle 依赖项。这对 Android Studio 更友好,因为 Android Studio 不会给出消息“无法解析符号...”

 dependencies {
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
 }
于 2015-08-19T00:40:41.727 回答
16

Android 9 (Pie) 的注意事项。

此外,useLibrary 'org.apache.http.legacy'您还必须添加 AndroidManifest.xml:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

来源:https ://developer.android.com/about/versions/pie/android-9.0-changes-28

于 2018-12-29T15:23:02.560 回答
13

在你的 build.gradle 文件中添加useLibrary 'org.apache.http.legacy'按照Android 6.0 Changes>Apache HTTP Client Removal注释。

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

为了避免丢失链接错误,添加到依赖项

dependencies {
    provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

使用 'provided' 依赖项将不包含在 apk 中

于 2015-09-23T14:03:47.150 回答
11

刚刚复制的文件:org.apache.http.legacy.jarAndroid/Sdk/platforms/android-23/optional文件夹到项目文件夹app/libs

像 23.1.1 的魅力一样工作。

于 2016-02-14T15:04:26.867 回答
2

我这样解决了这个问题:

1.)在顶级构建文件中设置类路径,如 GUG 所述:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0-beta2'
    }
    allprojects {
        repositories {
           jcenter()
        }
    }
}

2.) 在特定模块的构建文件中:

android {
   useLibrary 'org.apache.http.legacy'
   compileSdkVersion 'android-MNC'
   buildToolsVersion '23.0.0 rc3'
}
于 2015-07-14T09:19:59.607 回答
2

它应该有帮助:

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

为了避免丢失链接错误,添加到依赖项

dependencies {
    provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

或者

dependencies {
    compileOnly 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}

因为

Warning: Configuration 'provided' is obsolete and has been replaced with 'compileOnly'.
于 2015-11-14T06:47:28.457 回答
2

由于答案有点老了,我会提出我的解决方案(对我有用的),它可能对其他人有帮助......我从 Apache 的官方文档中获取了我的解决方案,没有解决方法。

1/ 毕业:

dependencies {
...
// This is the maintained version from apache.
compile group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.1'
}

2/ 在应用程序的其余部分替换org.apache.httpbycz.msebera.android.httpclient并且您的所有导入(依赖项)都将被修复。你可以做 ctrl+shift+R 并在整个项目中替换它。

于 2016-10-28T09:24:09.923 回答
1

FWIW 不久前就预示着 Apache 库的删除。我们的好朋友 Jesse Wilson 在 2011 年给了我们一个线索: http ://android-developers.blogspot.com/2011/09/androids-http-clients.html

谷歌不久前停止了 ApacheHTTPClient 的工作,因此任何仍然依赖它的库都应该被放入已弃用的库列表中,除非维护者更新他们的代码。

<rant> 我无法告诉你我与坚持使用 Apache HTTP 客户端的人有过多少技术争论。有一些主要的应用程序将会崩溃,因为我不知名的前雇主的管理层没有听取他们的顶级工程师的意见,或者当他们忽略警告时不知道他们在说什么......但是,水桥。

我赢了。

</rant>

于 2015-10-12T23:41:02.140 回答
0

要解决这些问题,请确保您使用的是构建工具版本“23.0.0 rc2”和以下工具构建 gradle 依赖项:

classpath 'com.android.tools.build:gradle:1.3.0-beta2'
于 2015-06-29T07:14:38.940 回答
0

Apache HTTP 客户端已弃用

在 Android 6.0 中,谷歌移除了对 Apache HTTP 客户端的支持。从 Android 9 开始,该库已从引导类路径中移除,并且默认情况下对应用程序不可用。

要继续使用 Apache HTTP 客户端,面向 Android 9 及更高版本的应用可以将以下内容添加到其

AndroidManifest.xml:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

笔记:

最低 SDK 为 23 或更低的应用需要 android:required="false" 属性,因为在 API 级别低于 24 的设备上,org.apache.http.legacy 库不可用。(在这些设备上,Apache HTTP 类在 bootclasspath 中可用。)

发现所有 android 9.0 更改:

https://developer.android.com/about/versions/pie/android-9.0-changes-28

于 2021-08-31T12:56:37.883 回答