Android Gradle Apache HttpClient不存在?

我试图将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和谷歌都没有解决方案,所以我希望这个问题能帮助未来的搜索者。

233601 次浏览

我遇到过类似的问题,你可以用类似的方法让它工作。

首先,在当前配置中尝试这样做,从httpmime中排除httpclient:

dependencies {
compile 'com.google.android.gms:play-services:+'
compile ('org.apache.httpcomponents:httpmime:4.2.6'){
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient:4.2.6'
}

在我的情况下,我通过使用以下罐子来修复它:

然后,在构建中。gradle,从httpmime中排除httpclient:

dependencies {
compile 'com.google.android.gms:play-services:+'
compile('org.apache.httpcomponents:httpmime:4.3.5') {
exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpclient-android:4.3.5.1'
}
我有这个问题,然后找到了这些页面: 在这里您可以看到apache库已弃用,但它没有被删除,所以它应该可以工作。它不是。< / p >

看到

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

看到

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

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

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

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

希望这能有所帮助。

如果你使用目标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'

更多信息请参考链接

我也遇到了同样的问题。Daniel Nugent的回答有点帮助(在听从他的建议后,HttpResponse被找到了-但HttpClient仍然不见了)。

这就是我解决问题的方法:

  1. (如果还没有完成,推荐之前的import-statements)
  2. 访问http://hc.apache.org/downloads.cgi
  3. 从二进制部分获取4.5.1.zip
  4. 解压并粘贴httpcore-4.4.3 &project/libs文件夹中的httpclient-4.5.1.jar
  5. 右键单击罐子并选择添加为库

希望能有所帮助。

这就是我所做的,而且对我很有效。

步骤1:将此添加到构建中。年级(模块:应用)

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

步骤2:同步项目并完成。

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'])

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

useLibrary  'org.apache.http.legacy'

到你的build.gradle文件。

Android上提供的Apache HTTP客户端版本是非常非常古老

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

当你通过useLibrary 'org.apache.http.legacy'工作方法(由@Jinu和其他人建议)继续使用旧的已弃用库时,你真的需要咬紧牙锁并更新到其他东西,例如原生Android HttpUrlConnection,或者如果这不能满足你的需求,你可以使用OkHttp图书馆,这就是HttpUrlConnection内部基于

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

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

吉努和丹尼尔的完美回答

我通过使用这个解决了问题,如果你的compileSdkVersion是19(在我的情况下)

compile ('org.apache.httpcomponents:httpmime:4.3'){
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile ('org.apache.httpcomponents:httpcore:4.4.1'){
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile 'commons-io:commons-io:1.3.2'
如果你的compileSdkVersion是23,则

else 然后使用< / p >

android {
useLibrary 'org.apache.http.legacy'
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
}

在这个问题上花了几天时间后,我终于设法解决了它。不幸的是,我们需要它,如果我们想使用扩展文件。这里的一些人已经提供了解决方案,但对我来说,答案遗漏了一些小细节,可以为我节省很多时间。下面是事件的顺序,像我这样的新手可以节省你宝贵的时间。

首先,我从D:\Users\Imre\AppData\Local\Android\sdk1\extras\谷歌\play_licensing导入“library”文件夹,进入文件,新建,导入模块,然后导航到“library”文件夹。如果你打开SDK管理器,点击弹出屏幕底部的“启动独立SDK管理器”,你可以将指针悬停在底部的“Extras”文件夹上,黄色的小信息会告诉你在哪里可以找到你需要导入的包。

一旦完成,在左侧窗格的“项目”下到“图书馆”部分,并在其中打开“Android”选项卡。打开库的java部分并打开APKExpansionPolicy类。 如果你有错误,import org.apache.http.NameValuePair和import org.apache.http.client.utils.URLEncodedUtils是浅灰色的,打开build.gradle(Project:whatever),并确保在“依赖”下的“buildscript”中包含了“classpath 'com.android.tools.build:gradle:1.5.0”。1.5.0在您的情况下可能有所不同。我想这取决于你的Studio版本。我的是1.5.1。如果你的是更新的,你会被提醒更新数字

在此之后,转到“build.gradle(Module:library)”,并包含“useLibrary”。“Legacy”进入“android”部分。应提供立即同步(R/H上角)。这样做。

如果您得到进一步的错误消息(我不知道,因为我是反过来做的),Apache文件可能从您的项目中丢失,因为Apache不再受支持。在C/D:Users/Yourname/AppData/Local/Android/Sdk/platforms/ Android -23/optional文件夹中找到它们,并复制/粘贴到你的project/app/libs文件夹中。你应该有一个可选选项。Json和一个org.apache.http.legacy.jar文件。你最好去apache的网站下载最新版本:http://hc.apache.org/downloads.cgi将它解压到任何你想要的地方,打开它,到“lib”,复制httpclient-4.5.1.jar文件,并用它替换org.apache.http.legacy.jar文件。

同步并重新构建/清理您的项目,它应该可以运行了。

以防万一,打开你的终端(Android Studio的L/H底部),输入“gradlew clean”。它会安装一些东西。一旦完成,输入“gradlew assemble”。它会花几分钟来完成,但是如果你有错误的话,它会告诉你。 如果你不能在终端中输入任何东西,启动命令提示符(Windows按钮+R),键入cmd,点击确定,右键单击小黑色弹出屏幕的标题(C:\ Windows \system32\cmd.exe),属性,选项,在窗口底部检查“使用旧控制台”是厚的。重启A.Studio。< / p >

好运!

我不得不发帖,因为上面的答案都不完全适合我。

我正在使用Android Studio

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


compileSdkVersion 23
buildToolsVersion "23.0.3"

第一步:下载最新的jar文件(http://www-eu.apache.org/dist//httpcomponents/httpclient/binary/httpcomponents-client-4.5.2-bin.zip)

第二步:复制粘贴.jar文件到你的模块(可以是app或library)中的libs文件夹(如果不存在就创建)

步骤3:右键单击jar并“添加为库”。它会自动将jar文件作为依赖项添加到模块的gradle文件中

第4步:现在你的问题会自动得到解决,但如果你在你的应用程序中使用proguard,它会给你关于重复类文件的警告,不会让你构建。这是一个已知的错误,您需要在您的proguard-rules中添加以下内容

-dontwarn org.apache.commons.**
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**

好运!

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

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

我从:

compile 'com.anupcowkur:reservoir:2.1'

:

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

将这个库添加到build.gradle

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

我建议你用新的HttpURLConnection替换已弃用的apache HttpClient。

这是一个更干净的解决方案,很容易迁移,通常最好坚持最新的SDK更改,而不是试图破解/修补/变通:你通常会后悔:)

步骤1

HttpGet httpGet = new HttpGet(url);

就变成:

URL urlObj = new URL(url);

步骤2

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpGet, localContext);
InputStream is = response.getEntity().getContent();

就变成:

HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
InputStream is = urlConnection.getInputStream();

2 . bis

int status = response.getStatusLine().getStatusCode();

就变成:

int status = urlConnection.getResponseCode();

我克隆了以下文件:https://github.com/google/play-licensing

然后我把它导入到我的项目中。