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

Удаление Apache HTTP Client из API23, повлияет ли это на Volley?

Как мы знаем, Apache HTTP Client удален в API 23

Удаление HTTP-клиента Apache

Однако библиотека Volley в настоящее время по-прежнему использует библиотеку Apache, такую ​​как

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.cookie.DateUtils;

И я тестировал 2 проекта: один с compileSdkVersion 22, другой с compileSdkVersion 23, получил 2 скриншота:

compileSdkVersion 22

введите описание изображения здесь

compileSdkVersion 23

введите описание изображения здесь

У меня есть 2 вопроса:

  • Конечно, проекты API23, использующие Volley, все еще успешно работают. Однако я не понимаю, как они используют библиотеку Apache во время выполнения, делают ли они найти в API22 или ниже вместо этого?
  • Кроме того, мне интересно, будет ли в ближайшем будущем Volley модернизироваться так который больше не использует библиотеку Apache? Если нет, будут ли мои текущие проекты работать в будущем, если библиотека Apache полностью удалена и не поддерживается?

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

Любое объяснение будет оценено.

UPDATE:

Из комментариев @random я создал новый проект API23 с использованием официальной публичной библиотеки Google (я имею в виду git clone https://android.googlesource.com/platform/frameworks/volley, поскольку Google предложил здесь) вместо использования compile 'com.mcxiaoke.volley:library:1.0.17' в файле build.gradle. Да, при создании проекта возникли ошибки с отсутствием библиотеки Apache. Необходимо добавить useLibrary 'org.apache.http.legacy' в файл build.gradle, как описано.


2nd UPDATE:

Я только что настроил Google volley (как модуль в моем проекте), удалив библиотеку Apache. Пожалуйста, перейдите к моему образцу проекта GitHub для справки. Однако имейте в виду, что он не был полностью протестирован для всех случаев, и я проверил только 02 простых случая: GET и POST запросы с моей веб-службой, которая ASP.NET Web API.

4b9b3361

Ответ 1

Кажется, в библиотеке Volley в Android M. был довольно беспорядок. Ошибка была уже зарегистрирована и подтверждена google.

https://code.google.com/p/android-developer-preview/issues/detail?id=3013

Вам следует начинать и отслеживать его для дальнейших обновлений

ОБНОВЛЕНИЕ

Что касается вашего первого вопроса, вы не получите ошибку для отсутствующих файлов apache, потому что используемая библиотека все еще скомпилирована с использованием API 22

ANDROID_BUILD_TARGET_SDK_VERSION=22
ANDROID_BUILD_TOOLS_VERSION=22.0.1
ANDROID_BUILD_SDK_VERSION=22

https://github.com/mcxiaoke/android-volley/blob/master/gradle.properties

Также проверьте эту открытую проблему из библиотеки согласно которому вы можете добавить устаревшую библиотеку

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

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

Ответ 2

Удаление HTTP-клиента Apache Этот предварительный просмотр удаляет поддержку для HTTP-клиента Apache. Если ваше приложение использует этот клиент и предназначено для Android 2.3 (уровень API 9) или выше, вместо этого используйте класс HttpURLConnection. Этот API более эффективен, поскольку он снижает использование сети благодаря прозрачному кешированию сжатия и ответа и минимизирует энергопотребление. Чтобы продолжить использование API-интерфейсов Apache HTTP, вы должны сначала объявить следующую зависимость времени компиляции в файле build.gradle:

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

Android отходит от OpenSSL до библиотеки BoringSSL. Если вы используете Android NDK в своем приложении, не связывайтесь с криптографическими библиотеками, которые не являются частью NDK API, например libcrypto.so и libssl.so. Эти библиотеки не являются общедоступными API-интерфейсами и могут меняться или прерываться без уведомления в разных выпусках и устройствах. Кроме того, вы можете подвергать себя уязвимостям безопасности. Вместо этого измените свой собственный код, чтобы вызывать API криптографии Java через JNI или статически ссылаться на библиотеку криптографии по вашему выбору.

Ответ 3

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

dependencies {
    compile 'commons-httpclient:commons-httpclient:3.1'
}

Ответ 4

Добавьте это в зависимости от вашего приложения, а затем правильно выполните:

зависимости { ... msgstr " }

Ответ 5

Это одна огромная истерика об Apache HTTP-клиенте. Вы можете продолжать использовать его в любом проекте, который вы хотите, без каких-либо последствий. Зачем тратить время на перенос кода в другие библиотеки? Я описал лучший способ продолжить использование библиотек Apache: fooobar.com/questions/22801/... (спойлер: не используйте устаревшую версию!)

Ответ 6

Appache Http удаляется из android API level 23, если вы все еще используете клиент Apache Http, вы можете включить android { useLibrary 'org.apache.http.legacy'} в project - module build.gradle