android - trabajar - La eliminación de Apache HTTP Client de API23, ¿afectará eso a Volley?
por que usar apache (6)
Como sabemos, Apache HTTP Client
eliminó en la API 23
Eliminación del cliente HTTP Apache
Sin embargo, la biblioteca de Volley
actualmente todavía usa la biblioteca de Apache
como
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;
Y he probado 2 proyectos: uno con compileSdkVersion 22
, el otro con compileSdkVersion 23
, obtuve 2 capturas de pantalla:
compileSdkVersion 22
compileSdkVersion 23
Tengo 2 preguntas:
- Por supuesto, los proyectos API23 que usan Volley todavía funcionan con éxito. Sin embargo, no entiendo cómo usan la biblioteca de
Apache
en el tiempo de ejecución, ¿encuentran en API22 o más bajo? - Además, me pregunto si en el futuro cercano, ¿se actualizará Volley para que ya no use la biblioteca de
Apache
? De lo contrario, ¿seguirán funcionando mis proyectos actuales en el futuro cuando la biblioteca deApache
elimine por completo y no sea compatible?
Quizás mi inglés no sea tan claro, sin embargo, espero que entiendas mi pregunta.
Cualquier explicación será apreciada.
ACTUALIZAR:
A partir de los comentarios de @ random, creé un nuevo proyecto API23 utilizando la biblioteca oficial de Volley de Google (me refiero a git clone https://android.googlesource.com/platform/frameworks/volley
como sugiere Google here ), en lugar de usar compile ''com.mcxiaoke.volley:library:1.0.17''
en el archivo build.gradle
. Sí, obtuve errores con la falta de biblioteca de Apache al construir el proyecto. Debe agregar useLibrary ''org.apache.http.legacy''
en el archivo build.gradle
como se documenta.
2ª ACTUALIZACIÓN:
Acabo de personalizar la descarga de Google (como módulo en mi proyecto) eliminando la biblioteca de Apache. Por favor, vaya a mi proyecto de ejemplo GitHub para su referencia. Sin embargo, tenga en cuenta que no se ha probado completamente en todos los casos, y solo he probado 02 casos simples: solicitudes GET
y POST
con mi servicio web que es ASP.NET Web API
.
Agrega esto a las dependencias de tu aplicación y luego funciona correctamente:
dependencias {... compile ''org.jbundle.util.osgi.wrapped: org.jbundle.util.osgi.wrapped.org.apache.http.client: 4.1.2''}
Eliminación del cliente HTTP Apache Esta vista previa elimina el soporte para el cliente HTTP Apache. Si su aplicación usa este cliente y se dirige a Android 2.3 (API nivel 9) o superior, use la clase HttpURLConnection en su lugar. Esta API es más eficiente porque reduce el uso de la red a través de la compresión transparente y el almacenamiento en caché de respuestas, y minimiza el consumo de energía. Para continuar usando las API HTTP de Apache, primero debe declarar la siguiente dependencia de tiempo de compilación en su archivo build.gradle:
android {
useLibrary ''org.apache.http.legacy''
}
Android se está alejando de OpenSSL a la biblioteca BoringSSL. Si está utilizando el NDK de Android en su aplicación, no vincule las bibliotecas criptográficas que no forman parte de la API del NDK, como libcrypto.so y libssl.so. Estas bibliotecas no son API públicas, y pueden cambiar o romperse sin previo aviso en las versiones y dispositivos. Además, puede exponerse a vulnerabilidades de seguridad. En su lugar, modifique su código nativo para llamar a las API de criptografía de Java a través de JNI o para enlazar estáticamente contra una biblioteca de criptografía de su elección.
Es una enorme histeria sobre el cliente HTTP de Apache. Puede continuar usándolo en cualquier proyecto que desee sin ninguna consecuencia. ¿Por qué perder el tiempo portando código a otras bibliotecas? Describí la mejor manera de continuar usando las bibliotecas de Apache aquí: https://.com/a/37623038/1727132 (spoiler: ¡no use la versión heredada!)
Parece que ha habido bastantes problemas con la biblioteca Volley en Android M. Ya se ha registrado un error y Google lo ha reconocido.
https://code.google.com/p/android-developer-preview/issues/detail?id=3013
Debes iniciarlo y seguirlo para más actualizaciones.
ACTUALIZAR
Con respecto a su primera pregunta, no recibe un error por la falta de archivos apache
porque la biblioteca que está usando todavía está compilada utilizando 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
Verifique también este problema abierto en la biblioteca según el cual puede agregar una biblioteca heredada
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary ''org.apache.http.legacy''
...
}
Appache Http
se elimina del API level 23
Android. Si aún utiliza el cliente Apache Http, puede incluir android { useLibrary ''org.apache.http.legacy''}
en su project - module build.gradle
android {
useLibrary ''org.apache.http.legacy''
}
dependencies {
compile ''commons-httpclient:commons-httpclient:3.1''
}