Apache HttpClient Android (Gradle)

Posted

技术标签:

【中文标题】Apache HttpClient Android (Gradle)【英文标题】: 【发布时间】:2014-09-24 19:26:57 【问题描述】:

我已将此行添加到我的 build.gradle

compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5'

我想在我的代码中使用 MultipartEntityBuilder。但是 Android Studio 不会将库添加到我的代码中。 谁能帮我解决这个问题?

【问题讨论】:

该行是否在*** dependencies 闭包中?您是否在*** repositories 闭包中配置了 mavenCentral() @CommonsWare 我是新手,你能解释一下吗?***闭包是什么意思?以及如何检查那里是否配置了 mavencentral 鉴于您在 cmets 中报告的以下一个答案的错误,您已经设置了这些部分。 @CommonsWare 为什么不jcenter()?它有更多的工件,更好的搜索,Gradle 的复制粘贴 sn-ps,这就是 Android Studio 推荐的。 @CommonsWare 您在 Maven Central 上找到的所有内容也都在 JCenter 中,因此您可以放心使用。但 Gradle 和 Android Studio 都比 Maven Central 更多 jcenter()。切换Gradle还有一个悬而未决的问题,请在jcenter中查看。 【参考方案1】:

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

android
 useLibrary  'org.apache.http.legacy'

附加说明:不要尝试使用这些文件的 gradle 版本。他们坏了(28.08.15)。我尝试了 5 个多小时才让它工作。它只是没有。 不工作:

compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile 'org.apache.httpcomponents:httpclient:4.5'

另一件事 不要使用:

'org.apache.httpcomponents:httpclient-android:4.3.5.1'

指的是 21 个 API 级别。

【讨论】:

不只是目标 SDK,如果你使用 compile SDK 23 也会发生这种情况,proguard 仍然会抛出错误 添加这三个jar后,我的项目已经有了google play服务,fbook sdk,appcompat_v7,所以我得到了65K方法的错误,你能建议以上库的proguard吗? @Chitrang 你也可以让你的应用程序多索引;):) @Chitrang use android useLibrary 'org.apache.http.legacy' 将此添加到您的 build.gradle 文件中删除上面的编译文件依赖项 只需添加“android useLibrary 'org.apache.http.legacy' ”即可解决我的问题。谢谢!【参考方案2】:

接受的答案对我来说似乎不太正确。当可以依赖同一版本的 HttpMime 时,拖动不同版本的 HttpMime 是没有意义的。

compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5'
compile (group: 'org.apache.httpcomponents' , name: 'httpmime' , version: '4.3.5') 
    exclude module: 'org.apache.httpcomponents:httpclient'

【讨论】:

我最终下载了 jar 文件,因为我无法从 gradle 获得正确的版本 这就是我告诉你的,你不接受我的回答 使用 API 级别 23 这不能很好地工作。实际上,Jinu 下面的答案对我有用。在 android 部分添加useLibrary 'org.apache.http.legacy' 解决了我的情况。【参考方案3】:

尝试将此添加到您的依赖项中:

compile 'org.apache.httpcomponents:httpclient:4.4-alpha1'

通常如果你想使用一个库并且你正在搜索 Gradle 依赖行,你可以使用Gradle Please

编辑:也检查this 一个。

【讨论】:

我得到这个错误:依赖打包来定义主要工件的扩展已被弃用,并计划在 Gradle 2.0 中删除警告:依赖 org.apache.httpcomponents:httpclient:4.4-alpha1调试时忽略它,因为它可能与 Android 提供的内部版本冲突。如有问题,请用jarjar重新打包更改类包 那如果已经包含在Android系统中就没有理由添加了! 但我无法导入库 它说无法解析符号'MultipartEntityBuilder'并且不建议任何导入。 @HiradRoshandel:希望在某个地方有更多说明,来自httpclient-android 工件的维护者,解释如何在 Android Studio/Gradle for Android 项目中正确使用该工件。【参考方案4】:

其他人都没有为我工作。我必须添加以下依赖项,如 here

所述
compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1'

因为我的目标是 API 23。

【讨论】:

这真的是最好的选择,看到它这么低很难过。我描述了为什么遗留 jar 更好,以及这里的任何内容:***.com/a/37623038/1727132 同样的情况,我也必须这样做【参考方案5】:

我通过将以下内容添加到我的 build.gradle 文件解决了问题

android 
useLibrary 'org.apache.http.legacy'

但是,这仅在您使用 gradle 1.3.0-beta2 或更高版本时才有效,因此如果您使用的是较低版本,则必须将其添加到 buildscript 依赖项中:

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

【讨论】:

Could not find method android() for arguments.【参考方案6】:

我一遍又一遍地搜索这个解决方案就像一个魅力::

    apply plugin: 'com.android.application'
    android 
        compileSdkVersion 25
        buildToolsVersion "25.0.3"
        defaultConfig 
            applicationId "com.anzma.memories"
            useLibrary 'org.apache.http.legacy'
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        
 packagingOptions 
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/dependencies.txt'
            exclude 'META-INF/LGPL2.1'
        
    buildTypes 
            release 
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            
        
    
    dependencies 
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile('org.apache.httpcomponents:httpmime:4.3.6') 
            exclude module: 'httpclient'
        
        compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
        compile 'com.android.support:appcompat-v7:25.3.1'
        testCompile 'junit:junit:4.12'
    

【讨论】:

为了将来参考,请将答案的文本部分与代码分开,以提高答案的可读性和质量。【参考方案7】:

我不知道为什么,但(目前)httpclient 可以作为 jar 编译到项目的 libs 目录中。 HttpCore 在像这样从 mvn 中包含时可以正常工作:

dependencies 
      compile 'org.apache.httpcomponents:httpcore:4.4.3'

【讨论】:

【参考方案8】:

工作 gradle 依赖

试试这个:

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

【讨论】:

以上是关于Apache HttpClient Android (Gradle)的主要内容,如果未能解决你的问题,请参考以下文章

Apache HttpClient Android (Gradle)

android和httpClient

Android 项目使用 httpclient --> http.client (apache), post/get 方法

在 Android SDK 23 中使用 Apache HttpClient。NoSuchMethod

Android SDK ~ Cloud Vision:警告:org.apache.httpcomponents:httpclient:4.0.1

android 使用Apache httpclient 4.3 出错