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
仍然失踪)。
所以这里是为我修复的:
- (如果尚未完成,则表示以前的import说明)
- 请访问http://hc.apache.org/downloads.cgi
- 从二进制部分获取
4.5.1.zip
- 解压缩并在
project/libs
文件夹中粘贴httpcore-4.4.3
&httpclient-4.5.1.jar
- 右键单击该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
然后我将其导入到我的项目中。