Как добавить API Apache HTTP (legacy) в качестве времени компиляции для build.grade для Android M?
Как уже упоминалось , Android M не поддерживает API Apache HTTP. Состояние документов:
используйте вместо этого класс HttpURLConnection.
или
Чтобы продолжить использование API-интерфейсов Apache HTTP, вы должны сначала объявить следующую зависимость времени компиляции в файле build.gradle:
android {useLibrary 'org.apache.http.legacy' }
Я преобразовал большую часть моего использования проекта HttpClient в HttpURLConnection, однако мне все еще нужно использовать HttpClient в нескольких областях. Следовательно, я пытаюсь объявить "org.apache.http.legacy" как зависимость времени компиляции, но получаю ошибку в build.gradle:
Gradle Метод DSL не найден: 'useLibrary()'
Мой вопрос: как объявить "org.apache.http.legacy" как зависимость времени компиляции в моем проекте?
Любая помощь очень ценится. Благодаря
Ответы
Ответ 1
Для API 23:
Верхний уровень build.gradle -/build.gradle
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
}
}
...
Специфичный для модуля build.gradle -/app/build.gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary 'org.apache.http.legacy'
...
}
Официальные документы (для предварительного просмотра): http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client
Последняя версия андроида gradle: http://tools.android.com/tech-docs/new-build-system
Ответ 2
Другая альтернатива - просто добавить зависимость jbundle.
Это больше подходит для Android Studio, поскольку Android Studio не дает сообщение "не может разрешить символ..."
dependencies {
compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}
Ответ 3
В файле build.gradle добавьте useLibrary 'org.apache.http.legacy' согласно Android 6.0 Changes
> Apache HTTP Client Removal
отмечает.
android {
...
useLibrary 'org.apache.http.legacy'
...
}
Чтобы избежать недостающих ошибок ссылок, добавьте в зависимости
dependencies {
provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}
используя 'provided', зависимость не будет включена в apk
Ответ 4
Скопированный файл: org.apache.http.legacy.jar
из Android/Sdk/platforms/android-23/optional
в папку проекта app/libs
.
Работает как шарм для 23.1.1.
Ответ 5
FWIW удаление Apache-библиотеки было предварено некоторое время назад. Наш хороший друг Джесси Уилсон дал нам ключ к сведению в 2011 году:
http://android-developers.blogspot.com/2011/09/androids-http-clients.html
Google перестала работать с ApacheHTTPClient некоторое время назад, поэтому любая библиотека, которая все еще полагается на нее, должна быть помещена в список устаревших библиотек, если только обновители не обновят свой код.
<rant>
Я не могу сказать, сколько технических аргументов у меня было с людьми, которые настаивали на том, чтобы придерживаться HTTP-клиента Apache. Есть некоторые крупные приложения, которые собираются сломать, потому что менеджмент у моих не-названных предыдущих работодателей не слушал своих лучших инженеров или не знал, о чем они говорили, когда они игнорировали предупреждение... но, вода под мост.
Я выигрываю.
</rant>
Ответ 6
Поскольку ответы немного устарели, я поставлю свое решение (что сработало для меня), это может быть полезно для кого-то другого... Я принял свое решение из официальная документация Apache, без работы.
1/in gradle:
dependencies {
...
// This is the maintained version from apache.
compile group: 'cz.msebera.android', name: 'httpclient', version: '4.4.1.1'
}
2/в остальной части приложения замените org.apache.http
на cz.msebera.android.httpclient
, и все ваши импорт (зависимости) будут исправлены. вы можете просто сделать ctrl + shift + R и заменить его во всем проекте.
Ответ 7
Я решил эту проблему следующим образом:
1.) Задайте путь к классам в файле сборки верхнего уровня, о котором упоминалось в GUG:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0-beta2'
}
allprojects {
repositories {
jcenter()
}
}
}
2.) В файле сборки конкретного модуля:
android {
useLibrary 'org.apache.http.legacy'
compileSdkVersion 'android-MNC'
buildToolsVersion '23.0.0 rc3'
}
Ответ 8
Чтобы устранить проблемы, убедитесь, что вы используете средства сборки версии "23.0.0 rc2" со следующими инструментами: build gradle dependency:
classpath 'com.android.tools.build:gradle:1.3.0-beta2'
Ответ 9
это должно помочь:
android {
...
useLibrary 'org.apache.http.legacy'
...
}
Чтобы избежать недостающих ошибок ссылок, добавьте в зависимости
dependencies {
provided 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
}