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 не имеют решения, поэтому я надеюсь, что этот вопрос поможет будущим поисковикам.

779   15  

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 который находится в до app/libs

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

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

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

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

добавить эту библиотеку в сборку.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'
}

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

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

иначе, если ваш 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 API пришлось преждевременно заморозить, в то время как многие интерфейсы и внутренние структуры все еще не были полностью проработаны. Поскольку Apache HttpClient 4.0 созревал, проект ожидал, что Google включит последнюю версию улучшения кода в код дерева. К сожалению, этого не произошло.

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

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

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

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

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

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

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

Если вы получите дополнительные сообщения об ошибках (я бы не знал, потому что я сделал это наоборот), файлы Apache могут отсутствовать в вашем проекте, так как apache больше не поддерживается. Найдите их в C/D:Users/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), свойства, параметры, в нижней части окна проверьте, что "использовать устаревшую консоль" утолщена. Перезапуск A. Studio.

удачи!

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

Я использую 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 вашего модуля

Шаг 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'

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

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

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

Comments

    Ничего не найдено.