Как правильно импортировать HttpClient из org.apache на Android с помощью файла сборки gradle?
Я вижу эту ошибку, когда пытаюсь запустить "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, но затем не удается скомпилировать?
Ответы
Ответ 1
Я думаю, что в библиотеке httpclient нет частей mime, которые находятся в httpmime. Это транзитивная зависимость httpclient, но поскольку это игнорируется, это не будет приниматься во внимание.
Попробуйте добавить эту зависимость:
compile "org.apache.httpcomponents:httpmime:4.2.3"
Ответ 2
Добавление 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'
}
Ответ 3
Для Android теперь доступно HttpClient 4.3.X, упакованное дистрибутив Maven
Project repo: https://github.com/smarek/httpclient-android
Тег Maven: cz.msebera.android:httpclient:4.3.+
Опубликовано в хранилище Maven Central
В версии 4.3.3 включены HttpCore, HttpClient, HttpClient-Cache и HttpMime (все версии)
Отказ от ответственности: я автор проекта
Ответ 4
Добавление к этому
Я решил проблему, используя это, если ваша 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'
else, если ваш 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'
}
}
Ответ 5
Поскольку официальные API Android включают httpclient, мы удаляем всю зависимость от httpclient, включая его транзитивную зависимость.
Если вы действительно хотите использовать httpclient, я бы переупаковал его с jarjar, переименовывая пакеты и использую это вместо этого.
Что касается httpmime, похоже, что это не на самом деле в android.jar, поэтому мы могли бы не фильтровать его, но теперь вам придется добавить его вручную.
Мы, вероятно, захотим настроить его до того, как система сборки будет 1.0
Ответ 6
Просто добавьте это в файл build.gradle(Module: app):
dependencies {
...
implementation "org.apache.httpcomponents:httpmime:4.5.6"
}