Как правильно импортировать HttpClient из org.apache на Android с помощью файла сборки градации?

Я вижу эту ошибку, когда пытаюсь запустить "gradle build"

WARNING: Dependency org.apache.httpcomponents:httpclient:4.2.3 is ignored for the default configuration as it may be conflicting with the internal version provided by Android. In case of problem, please repackage with jarjar to change the class packages :prepareFreeDebugDependencies :compileFreeDebugAidl UP-TO-DATE :generateFreeDebugBuildConfig UP-TO-DATE :mergeFreeDebugAssets UP-TO-DATE :compileFreeDebugRenderscript UP-TO-DATE :mergeFreeDebugResources UP-TO-DATE :processFreeDebugManifest UP-TO-DATE :processFreeDebugResources UP-TO-DATE :compileFreeDebug /home/xrdawson/Projects/Foo/Bar/src/main/java/com/Foo/app/PixActivity.java:20: error: package org.apache.http.entity.mime does not exist import org.apache.http.entity.mime.HttpMultipartMode; ^ 

Конец моего build.gradle выглядит так:

  repositories { mavenCentral() } dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile "org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.3" compile "com.madgag:markdownj-core:0.4.1" // compile "org.apache.httpcomponents:com.springsource.org.apache.httpcomponents.httpclient:4.2.1" compile 'org.apache.httpcomponents:httpclient:4.2.3' compile "com.google.android:support-v4:r6" } } 

Почему процесс компиляции игнорирует HttpClient, но затем не удается скомпилировать?

Solutions Collecting From Web of "Как правильно импортировать HttpClient из org.apache на Android с помощью файла сборки градации?"

Я думаю, что библиотека httpclient не включает в себя части mime, которые находятся в httpmime. Это транзитивная зависимость httpclient, но поскольку это игнорируется, это не будет учитываться.

Попробуйте добавить эту зависимость:

 compile "org.apache.httpcomponents:httpmime:4.2.3" 

Добавление http-mime в качестве зависимости заставляет httpclient быть включенным как транзитивную зависимость, которая для меня привела к тем же предупреждениям, что и OP. Я должен был сказать gradle игнорировать транзитивную зависимость:

 compile ('org.apache.httpcomponents:httpmime:4.3.5') { // avoid "is ignored for the default configuration X" warnings // since httpclient is included in the android SDK. exclude group: 'org.apache.httpcomponents', module: 'httpclient' } 

Для Android теперь доступно HttpClient 4.3.X переупакованное распределение Maven

Project repo: https://github.com/smarek/httpclient-android
Maven tag: cz.msebera.android:httpclient:4.3.+
Опубликовано в Maven Central репозиторий

Что в версии 4.3.3 включает HttpCore, HttpClient, HttpClient-Cache и HttpMime (все одинаковые версии)

Отказ от ответственности: я автор проекта

Добавив к этому, я решил проблему, используя это, если ваша compileSdkVersion равна 19 (IN MY CASE)

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

Поскольку официальные API Android включают httpclient, мы удаляем всю зависимость от httpclient, включая ее транзитивную зависимость.

Если вы действительно хотите использовать httpclient, я переупаковываю его с помощью jarjar, переименовывая пакеты и использую это вместо этого.

Что касается httpmime, похоже, что это не на самом деле в android.jar, поэтому мы могли бы не фильтровать его, но теперь вам придется добавлять его вручную.

Мы, вероятно, захотим настроить его до того, как система сборки будет 1.0