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

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

Любая помощь очень ценится. Благодаря

4b9b3361

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