Android Gradle Apache HttpClient не существует?

Я пытаюсь преобразовать проект IntelliJ в систему Gradle Android Studio, но я сталкиваюсь с ошибками с 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

моя сборка.файл 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')
}

Кажется, что многие люди получают аналогичную проблему, но ни так, ни Google не имеют решения, поэтому я надеюсь, что этот вопрос поможет будущим поисковикам.

15 ответов


Я предлагаю вам заменить устаревший Apache HttpClient на новый HttpURLConnection.

это более чистое решение, его довольно легко перенести, и, как правило, лучше придерживаться последних изменений 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();

Если вы используете целевой sdk как 23, добавьте ниже код в свою сборку.Gradle в

android{
    compileSdkVersion 23
    buildToolsVersion '23.0.1'
    useLibrary  'org.apache.http.legacy'
}

и измените buildscript на

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

для получения дополнительной информации следуйте по этой ссылке


у меня была эта проблема, а затем я нашел эти страницы: Здесь вы можете увидеть, что библиотека apache устарела, но она не удалена, поэтому она должна работать. Это не так.

посмотреть.

и здесь вы можете увидеть, как включить библиотеку apache в свой проект

посмотреть.

Я решил проблему, добавив следующее в мою сборку.gradle файл, как рекомендовано во второй ссылке.

android {
    useLibrary 'org.apache.http.legacy'
}
это работает только если вы используются gradle 1.3.0-beta2 или выше, поэтому вам придется добавить это в зависимости buildscript, если вы находитесь в более низкой версии:
classpath 'com.android.tools.build:gradle:1.3.0-beta2'

надеюсь, что это помогает.


скопировать org.apache.http.legacy.jar который находится в Android/Sdk/platforms/android-23/optional папка to app/libs

и добавил эту строку в приложение.файл gradle

compile files('libs/org.apache.http.legacy.jar')

но если вы используете больше библиотек jar, вы можете использовать этот способ

compile fileTree(dir: 'libs', include: ['*.jar'])

добавьте эту библиотеку в Build.Gradle в

 android {
      useLibrary 'org.apache.http.legacy'
 }

Я надеюсь, что это сработает.


в основном все, что вам нужно сделать, это добавить:

useLibrary  'org.apache.http.legacy'

в сборку.файл gradle.


я столкнулся с такой же проблемой. Ответ Даниэля Ньюджента немного помог (после того, как он последовал его совету HttpResponse был найден-но HttpClient все-таки не хватает).

Итак, вот что исправило это для меня:

  1. (если еще не сделано, рекомендуем предыдущие заявления импорта)
  2. посетить http://hc.apache.org/downloads.cgi
  3. скачать 4.5.1.zip из двоичного разделе
  4. распаковать его и вставить httpcore-4.4.3 & httpclient-4.5.1.jar in project/libs папку
  5. правой кнопкой по jar и выберите добавить в библиотеку.

надеюсь, что это помогает.


я столкнулся с аналогичными проблемами, вы могли бы заставить его работать с помощью аналогичного метода.

во-первых, попробуйте это с текущей конфигурацией, исключить httpclient С httpmime:

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

в моем случае я исправил его, используя следующие банки:

затем, в сборке.gradle, исключая httpclient от httpmime:

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 и Daniel

добавление к этому Я решил проблему, используя это, если ваш 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'

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

Это то, что я сделал, и это работает для меня.

Шаг 1: добавьте это в построении.класс(модуль: приложение)

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

Шаг 2: синхронизация проекта и готово.


версия HTTP-клиента Apache, предоставленная на складе Android, была очень очень старые.

Google Android 1.0 был выпущен с предварительным бета-снимком Apache HttpClient. Чтобы совпасть с первым выпуском Android Apache HttpClient 4.0 APIs должен был быть заморожен преждевременно, в то время как многие интерфейсы и внутренние структуры все еще не были полностью разработаны. Поскольку Apache HttpClient 4.0 созревал, проект ожидал, что Google включит последнюю версию улучшения кода в их дереве кода. К сожалению, этого не произошло.

а вы мог бы продолжайте использовать старую устаревшую библиотеку через useLibrary 'org.apache.http.legacy' обходной путь (предложенный @Jinu и другими), вам действительно нужно укусить пулю и обновить что-то еще, например, родной Android HttpUrlConnection, или если это не отвечает вашим потребностям, вы можете использовать библиотека OkHttp, что HttpUrlConnection is основываясь на в любом случае.

OkHttp на самом деле имеет совместимость слое который использует тот же API, что и клиент Apache, хотя они не реализуют все из тех же функций, так что ваш пробег может варьироваться.

пока можно импортировать более новую версию клиента Apache (как предложил @MartinPfeffer), вероятно, что большинство классов и методов, которые вы использовали раньше, были устаревшими, и есть довольно большой риск того, что обновление приведет к ошибкам в вашем коде (например, я нашел некоторые соединения, которые ранее работали из-за прокси-сервера, больше не работали), поэтому это не отличное решение.


потратив несколько дней на эту тему, мне наконец удалось ее решить. К сожалению, нам это нужно, если мы хотим использовать файлы расширения. Решение было предоставлено несколькими людьми здесь, но для меня ответы отсутствовали несколько незначительных деталей, которые могли бы сэкономить много времени для меня. Вот последовательность событий для новичков, таких как я, чтобы сэкономить ваше драгоценное время.

сначала я импортировал папку "Библиотека" из D:\Users\Imre\AppData\Local\Android\sdk1\extras\google\play_licensing к проекту, перейдя в Файл, Создать, импортировать модуль и перейдите в папку "Библиотека". Если вы откроете менеджер SDK и нажмите " запустить автономный менеджер SDK "в нижней части всплывающего экрана, вы можете навести указатель мыши на папку" дополнительно " внизу, и небольшая желтая информация скажет вам, где вы найдете пакет, который вам нужно импортировать.

Как только это будет сделано, перейдите в раздел "Библиотека" в левой панели с "Project" и в нем " Android" вкладка открыта. Откройте раздел java библиотеки и откройте класс APKExpansionPolicy. Если у вас есть ошибки и импорт орг.апаш.http.NameValuePair и организация импорта.апаш.http.клиент.а utils.URLEncodedUtils бледно-серые, откройте сборку.gradle (Project:whatever) и убедитесь, что в "buildscript" в разделе "зависимости" у вас есть "classpath" com.андроид.инструменты.сборка: gradle: 1.5.0 " включено. 1.5.0 может отличаться в вашем случае. Я думаю, это зависит от вашей студийной версии. Моя 1.5.1. Если ваш новее, вам напомнят, чтобы обновить номера.

после этого перейдите в раздел " build.gradle (модуль: библиотека) и включает "useLibrary" org.апаш.http.наследие "в раздел "android". Синхронизация теперь (верхний угол R/H) должна быть предложена. Сделать его.

Если вы получите дополнительные сообщения об ошибках (я бы не знал, потому что я сделал это наоборот), файлы Apache могут отсутствовать в вашем проекте, так как apache больше не поддерживается. Найдите их в C/D:пользователи/Yourname/AppData/Local/Android/Sdk/platforms/android-23/необязательно и скопируйте/вставьте их в папку yourproject/app / libs. У вас должна быть опция.json и организация.апаш.http.наследие.jar-файл туда. Возможно, вам лучше перейти на веб-сайт apache и загрузить новейшую версию:http://hc.apache.org/downloads.cgi распакуйте его в любом месте, откройте его, перейдите в "lib", скопируйте httpclient-4.5.1.jar файл и замените орг.апаш.http.наследие.jar-файл с его помощью.

синхронизация и перестроить / очистить проект, и это должно быть хорошо идти.

на всякий случай откройте терминал (L / H внизу Android Studio) и введите "gradlew clean". Он установит несколько вещей. Как только это будет сделано, введите "gradlew assemble". На это потребуется несколько минут, чтобы закончить, но это даст вам ошибки, если они у вас есть конечно. Если вы не можете ввести что-либо в терминале, Запустите командную строку (кнопка Windows+R), введите cmd, нажмите OK, щелкните правой кнопкой мыши на название маленького черного всплывающего экрана (C:\WINDOWS\system32\cmd - ... exe), свойства, параметры, в нижней части окна проверьте, что" использовать устаревшую консоль " утолщена. Перезапуск Студии.

удачи!


мне пришлось опубликовать, поскольку ни один из вышеперечисленных ответов не работал полностью для меня.

Я использую Android Studio

classpath 'com.android.tools.build:gradle:1.5.0'

compileSdkVersion 23
buildToolsVersion "23.0.3"

Шаг 1: Загрузите файл lastest jar (http://www-eu.apache.org/dist//httpcomponents/httpclient/binary/httpcomponents-client-4.5.2-bin.zip)

Шаг 2: скопируйте и вставьте .файл jar в папку libs (создать, если еще не существует) в вашем модуле (может быть приложение или библиотека)

Шаг 3: щелкните правой кнопкой мыши на банке и "Добавить как библиотеку". Он автоматически добавит файл jar в качестве зависимости в файл gradle вашего модуля

Шаг 4: теперь автоматически ваша проблема будет решена, но если вы используете proguard в своем приложении, это даст вам предупреждение о дубликатах файлов классов и не позволит вам строить. Это известная ошибка, и вам нужно добавить следующее К вашим proguard-rules

-dontwarn org.apache.commons.**
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**

Удачи!


в моем случае я обновил одну из своих библиотек в своем проекте android.

Я использую резервуар в качестве решения для хранения кэша:https://github.com/anupcowkur/Reservoir

Я пошел с:

compile 'com.anupcowkur:reservoir:2.1'

В:

compile 'com.anupcowkur:reservoir:3.1.0'

автор библиотеки должен был удалить библиотеку commons-io из репо, чтобы мое приложение больше не работало.

мне пришлось вручную включить commons-io, добавив Это на Gradle в:

compile 'commons-io:commons-io:2.5'

https://mvnrepository.com/artifact/commons-io/commons-io/2.5


я клонировал следующее:https://github.com/google/play-licensing

затем я импортировал это в свой проект.