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

Мой файл build.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')
}

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

Ответ 1

Я предлагаю вам заменить устаревший 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();

Ответ 2

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

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

и измените свой buildscript на

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

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

Ответ 3

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

См..

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

См..

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

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

Однако это работает только в том случае, если вы используете gradle 1.3.0-beta2 или выше, поэтому вам придется добавить это к зависимостям buildscript, если вы находитесь в более низкой версии:

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

Надеюсь, что это поможет.

Ответ 4

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

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

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

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

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

Ответ 5

Добавьте эту библиотеку в build.gradle

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

Ответ 6

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

useLibrary  'org.apache.http.legacy'

В файл build.gradle.

Ответ 7

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

Сначала попробуйте это с вашей текущей конфигурацией, исключите 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'
} 

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

Затем в build.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'
}

Ответ 8

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

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

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

Надеюсь, что это поможет.

Ответ 9

Идеальный ответ Цзину и Даниэля

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

Ответ 10

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

шаг 1: добавьте это в build.grade(module: app)

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

Шаг 2: синхронизировать проект и выполнить его.

Ответ 11

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

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

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

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

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

Ответ 12

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

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

Как только это будет сделано, перейдите в раздел "Библиотека" в левой панели с "Project", и в нем откроется вкладка "Android". Откройте раздел java библиотеки и откройте класс APKExpansionPolicy. Если у вас есть ошибки и импорт org.apache.http.NameValuePair и import org.apache.http.client.utils.URLEncodedUtils бледно-серые, откройте build.gradle(Project: whatever) и убедитесь, что в "buildscript" в разделе "dependancies" вы включили "classpath" com.android.tools.build: gradle:1.5.0 ". 1.5.0 может отличаться в вашем случае. Я думаю, это зависит от вашей версии Studio. Шахта - 1.5.1. Если ваш новый, вам будет предложено обновить номера.

После этого перейдите в "build.gradle(Module: library) и включите" useLibrary "org.apache.http.legacy в раздел" android ". Синхронизируйте сейчас (верхний угол R/H). Сделайте это.

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

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

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

Удачи!

Ответ 13

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

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

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

compileSdkVersion 23
buildToolsVersion "23.0.3"

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

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

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

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

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

Удачи!

Ответ 14

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

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

Я пошел от:

compile 'com.anupcowkur:reservoir:2.1'

To:

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