Подтвердить что ты не робот

Как правильно импортировать 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, но затем не удается скомпилировать?

4b9b3361

Ответ 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"
}