我试图将IntelliJ项目转换为Android Studio的Gradle系统,但我遇到了Apache HttpClient错误?我是否遗漏了一些东西,我得到的错误如下:

Error:(10, 30) error: package org.apache.http.client does not exist
Error:(11, 30) error: package org.apache.http.client does not exist
Error:(12, 37) error: package org.apache.http.client.entity does not exist
Error:(13, 38) error: package org.apache.http.client.methods does not exist
Error:(14, 38) error: package org.apache.http.client.methods does not exist
Error:(15, 38) error: package org.apache.http.client.methods does not exist
Error:(16, 35) error: package org.apache.http.impl.client does not exist
Error:(134, 33) error: cannot find symbol class HttpUriRequest
Error:(164, 39) error: cannot find symbol class HttpUriRequest
Error:(106, 17) error: cannot find symbol class HttpGet
Error:(106, 39) error: cannot find symbol class HttpGet
Error:(117, 17) error: cannot find symbol class HttpPost
Error:(117, 40) error: cannot find symbol class HttpPost
Error:(125, 43) error: cannot find symbol class UrlEncodedFormEntity
Error:(135, 9) error: cannot find symbol class HttpClient
Error:(135, 33) error: cannot find symbol class DefaultHttpClient
Error:(155, 18) error: cannot find symbol class ClientProtocolException
Error:(165, 9) error: cannot find symbol class HttpClient
Error:(165, 33) error: cannot find symbol class DefaultHttpClient
Error:(185, 18) error: cannot find symbol class ClientProtocolException

我的建立。Gradle文件有以下依赖项:

dependencies {
    compile 'com.google.android.gms:play-services:+'
    compile 'org.apache.httpcomponents:httpclient:4.2.6'
    compile 'org.apache.httpcomponents:httpmime:4.2.6'
    compile files('libs/core.jar')
}

似乎很多人都遇到了类似的问题,但SO和谷歌都没有解决方案,所以我希望这个问题能帮助未来的搜索者。


当前回答

基本上你所需要做的就是添加:

useLibrary  'org.apache.http.legacy'

适合你的身材。gradle文件。

其他回答

在Android上提供的Apache HTTP客户端版本非常非常旧。

谷歌Android 1.0发布了Apache HttpClient的预beta快照。为了配合第一个Android版本,Apache HttpClient 4.0 api不得不过早冻结,而许多接口和内部结构仍然没有完全制定出来。随着Apache HttpClient 4.0的成熟,项目期望谷歌将最新的代码改进合并到他们的代码树中。不幸的是,这并没有发生。

虽然你可以通过useLibrary 'org.apache.http继续使用旧的被弃用的库。遗留的解决方案(由@Jinu和其他人建议),你真的需要咬咬牙,更新到其他东西,例如原生Android HttpUrlConnection,或者如果这不能满足你的需求,你可以使用OkHttp库,这是什么HttpUrlConnection是内部基于无论如何。

OkHttp实际上有一个兼容层,它使用与Apache客户端相同的API,尽管它们并没有实现所有相同的特性,所以您的性能可能会有所不同。

虽然可以导入更新版本的Apache客户端(正如@MartinPfeffer所建议的那样),但很可能您以前使用的大多数类和方法都已弃用,而且更新会在代码中引入错误的风险相当大(例如,我发现以前通过代理工作的一些连接不再工作),因此这不是一个很好的解决方案。

以我为例,我更新了我的android项目中的一个库。

我使用水库作为我的缓存存储解决方案:https://github.com/anupcowkur/Reservoir

我从:

compile 'com.anupcowkur:reservoir:2.1'

To:

compile 'com.anupcowkur:reservoir:3.1.0'

库作者一定是从repo中删除了commons-io库,所以我的应用程序不再工作。

我必须手动将commons-io添加到gradle:

compile 'commons-io:commons-io:2.5'

https://mvnrepository.com/artifact/commons-io/commons-io/2.5

将Android/Sdk/platforms/ Android -23/optional文件夹下的org.apache.http.legacy.jar复制到app/libs

并将这一行添加到app.gradle文件中

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

但是如果您正在使用更多的jar库,您可以使用这种方式

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

如果你使用目标SDK为23,在build.gradle中添加以下代码

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

并将构建脚本更改为

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

欲了解更多信息,请点击此链接

我遇到了这个问题,然后找到了这些页面: 在这里您可以看到apache库已弃用,但它没有被删除,所以它应该可以工作。它不是。

See.

在这里您可以看到如何将apache库包含到您的项目中

See.

我通过在我的构建中添加以下内容来解决这个问题。Gradle文件推荐在第二个链接。

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

然而,这只在你使用gradle 1.3.0-beta2或更高版本时有效,所以如果你在一个较低的版本上,你必须将这个添加到buildscript依赖项中:

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