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 

我的build.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或谷歌有解决scheme,所以我希望这个问题将有助于未来的search者。

我build议你用新的HttpURLConnectionreplace弃用的Apache HttpClient。

这是一个更干净的解决scheme,它很容易迁移,通常最好的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之二

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

变为:

 int status = urlConnection.getResponseCode(); 

如果你使用target sdk作为23在build.gradle中添加下面的代码

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

并将你的buildscript改为

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

有关更多信息,请点击此链接

我有这个问题,然后find这些网页:在这里,你可以看到,Apache库已弃用,但它不会被删除,所以它应该工作。 它不。

看 。

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

看 。

我解决了问题,在第二个链接中推荐我的build.gradle文件。

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

但是,只有在使用gradle 1.3.0-beta2或更高版本的情况下才能使用,所以如果您的版本较低,则必须将其添加到buildscript依赖项中:

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

希望这可以帮助。

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

将这个库添加到Build.Gradle中

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

我希望它的作品。

我遇到了同样的问题。 Daniel Nugent的回答有点帮助(按照他的build议HttpResponse被发现后 – 但HttpClient仍然失踪)。

所以这里是为我修复的:

  1. (如果尚未完成,则表示以前的import说明)
  2. 请访问http://hc.apache.org/downloads.cgi
  3. 从二进制部分获取4.5.1.zip
  4. 解压缩并在project/libs文件夹中粘贴httpcore-4.4.3httpclient-4.5.1.jar
  5. 右键单击该jar并select添加为库

希望它有帮助。

我遇到了类似的问题,你可能能够使用类似的方法得到它的工作。

首先,用你当前的configuration试试这个,从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' } 

在我的情况下,我通过使用下面的jar子固定它:

  • HttpClient的,Android的4.3.5.1.jar
  • httpmime-4.3.5.jar

然后,在build.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' } 

完美答案由Jinu和丹尼尔

添加到这个我解决了这个问题,如果你的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则使用

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

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

 useLibrary 'org.apache.http.legacy' 

到你的build.gradle文件。

这就是我所做的,这对我很有用。

第1步:将这添加到build.grade(module:app)

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

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

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

Google Android 1.0发布了Apache HttpClient的beta版快照。 为了配合第一个Android版本,Apache HttpClient 4.0 API必须被过早地冻结,而许多接口和内部结构还没有完全解决。 随着Apache HttpClient 4.0的成熟,项目希望Google能够将最新的代码改进融入代码树中。 不幸的是,这并没有发生。

虽然你可以通过useLibrary 'org.apache.http.legacy'解决方法(由@Jinu和其他人build议)继续使用旧的废弃库,但是你确实需要咬紧牙关并更新其他东西,例如原生的Android HttpUrlConnection ,或者如果那不符合您的需要,您可以使用OkHttp库 ,这是HttpUrlConnection在内部是基于的 。

OkHttp实际上有一个与 Apache客户端使用相同的API的兼容层 ,虽然他们没有实现所有相同的function,所以你的里程可能会有所不同。

虽然可以导入更新版本的Apache客户端 (正如@MartinPfeffer所build议的那样),但是您之前使用的大多数类和方法都已被弃用,而且更新将带来相当大的风险在你的代码中(例如,我发现以前在代理之后工作的一些连接不再工作),所以这不是一个好的解决scheme。

花了几天的时间,我终于设法解决了这个问题。 不幸的是我们需要它,如果我们想要使用扩展文件。 这个解决scheme是由几个人在这里提供的,但是对于我来说,答案缺less了一些细节,可以为我节省很多时间。 这里是像我这样的新手事件的序列,以节省您宝贵的时间。

首先,通过进入文件,新build,导入模块和导航到“库”文件夹,从D:\ Users \ Imre \ AppData \ Local \ Android \ sdk1 \ extras \ google \ play_licensing将“库”文件夹导入到项目中。 如果你打开SDKpipe理器并点击popup窗口底部的“启动独立SDKpipe理器”,你可以将指针hover在底部的“Extras”文件夹下方,小黄色信息会告诉你在哪里可以find您需要导入的软件包。

完成之后,进入左侧窗格中的“库”部分,在“项目”中打开“Android”选项卡。 打开库的java部分并打开APKExpansionPolicy类。 如果你有错误,并且导入org.apache.http.NameValuePair和导入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)”,并在“android”部分包含“useLibrary”org.apache.http.legacy“。 现在同步(R / H顶angular)应该提供。 这样做。

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

同步并重build/清理您的项目,这应该是好事。

为了以防万一,请打开您的terminal(Android Studio的L / H底部)并input“gradlew clean”。 它会安装一些东西。 完成后,input“gradlew assemble”。 完成需要几分钟的时间,但如果您有任何问题的话,会给您带来错误。 如果无法在terminal中input任何内容,请启动命令提示符(Windowsbutton+ R),inputcmd,点击确定,右键单击黑色小popup窗口(C:\ WINDOWS \ system32 \ cmd.exe) ,“属性”,“选项”,在窗口底部检查“使用旧式控制台”是否变厚。 重新启动A.Studio。

祝你好运!

我不得不发布,因为没有上述答案完全为我工作。

我正在使用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

第2步:将.jar文件复制粘贴到您的模块中的libs文件夹(如果不存在,则创build)(可以是应用程序或库)

第3步:右键单击jar和“添加为库”。 它会自动添加jar文件作为你的模块的gradle文件的依赖

第4步:现在自动你的问题将得到解决,但万一你在你的应用程序中使用proguard,它会给你关于重复类文件的警告,不会让你build立。 这是一个已知的错误,你需要添加以下你的proguard规则

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

祝你好运!

在我的情况下,我更新了我的android项目中的一个库。

我正在使用Reservoir作为caching存储解决scheme: https : //github.com/anupcowkur/Reservoir

我从:

 compile 'com.anupcowkur:reservoir:2.1' 

至:

 compile 'com.anupcowkur:reservoir:3.1.0' 

库作者必须已经从回购库中删除了commons-io库,所以我的应用程序不再工作。

我不得不通过将这个添加到gradle手动包含commons-io:

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

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

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

然后我将其导入到我的项目中。