如何将Apache HTTP API(legacy)作为编译时间依赖项添加到Android M的build.grade中?

如上所述,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方法未find:'useLibrary()'

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

任何帮助深表感谢。 谢谢

对于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

另一种select是只添加jbundle依赖。 这是更多的Android Studio友好的Android Studio不会给消息“无法parsing符号…”

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

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

为23.1.1工作像魅力。

在你的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' } 

使用“提供”的依赖将不会包含在apk中

FWIW Apache库的移除前一阵子已经预示了。 我们的好朋友Jesse Wilson在2011年给了我们一个线索: http : //android-developers.blogspot.com/2011/09/androids-http-clients.html

前一段时间,Google停止了ApacheHTTPClient的工作,所以任何仍然依赖它的库都应该被放到不赞成使用的库列表中,除非维护者更新他们的代码。

<rant>我不能告诉你有多less技术参数与坚持使用Apache HTTP客户端的人有过。 有一些主要的应用程序将被打破,因为在我不愿意提到的以前的雇主的pipe理人员没有听他们的顶级工程师,或者当他们忽略警告时就知道他们在说什么…但是,桥梁。

我赢了。

</rant>

由于答案有点老,我会把我的解决scheme(对我有用),对别人有帮助…我从Apache的官方文档中解决了我的解决scheme,没有解决办法。

1 /在gradle:

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

2 /在应用程序的其余部分用cz.msebera.android.httpclientreplaceorg.apache.http ,并且所有导入(依赖关系)都将被修复。 你可以做ctrl + shift + R并在整个项目中replace它。

我这样解决了这个问题:

1.)在顶层构build文件中设置类path为GUG提到:

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

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

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

要解决这个问题,请确保使用以下工具构buildgradle依赖关系的构build工具版本“23.0.0 rc2”:

 classpath 'com.android.tools.build:gradle:1.3.0-beta2' 

它应该是帮助:

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