¿Cómo usar el cliente Apache HTTP heredado en Android Marshmallow?
Fondo
En Android Marshmallow, Google ha eliminado por completo el soporte del cliente HTTP Apache (enlace aquí ) porque no tiene un buen rendimiento en comparación con las alternativas.
Esto también podría ser la causa de tantas aplicaciones de estrellarse en Android Marshmallow.
- Quitar el prefijo de URL de String (http: /, www, etc.)
- Leer correos electrónicos de Gmail con SDK de Android
- El paquete no existe cuando se utiliza una aplicación independiente como dependencia
- ¿Cómo puedo colocar un diseño justo encima del teclado en pantalla de Android?
- El mapa de bits guardado en android tiene 3 bytes de largo cuando se lee
El problema
Google le permite seguir utilizando esta API, no solo como una incorporada, agregando esta línea al archivo gradle:
useLibrary 'org.apache.http.legacy'
Por lo tanto, esto es lo que hice:
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }
Y:
android { compileSdkVersion 'android-MNC' buildToolsVersion "23.0.0 rc3" useLibrary 'org.apache.http.legacy' defaultConfig { applicationId "com.example.user.androidmtest" minSdkVersion 'MNC' targetSdkVersion 'MNC' versionCode 1 versionName "1.0" }
Cuando lo intenté, se compiló bien (no se muestran errores, y podría ejecutar la prueba de concepto de la aplicación, ya que no tiene ningún código especial), pero cuando traté de utilizar algunas de las clases que sé que Son parte de la antigua API (como "HttpClient" clase), veo que no me permite hacerlo.
Sé que no se recomienda usar esta solución, pero debemos tener la aplicación lista para trabajar allí por lo menos temporalmente, hasta que trabajemos 100% en todas las cosas que deberían cambiar para Android Marshmallow, y no queremos sorpresas en el Forma de accidentes.
Aquí hay una captura de pantalla:
La pregunta
¿Por qué ocurre? ¿Lo usé correctamente?
EDIT: informó sobre este problema aquí:
Https://code.google.com/p/android/issues/detail?id=181474
- Cómo generar una consulta con la selección por valor del campo del objeto extraño
- Android y C ++: ¿Necesario?
- Guardar clase en firebase
- Android Volley Null Pointer Exception
- Comprobación de la posición actual del fragmento abierto durante el uso de DrawerLayout
- Nombres de paquetes para dominios que terminan en .do
- Android - paint.setShadowLayer Omitiendo shadowColor
- Adición de objetos independientes a una RealmList
Android Studio se quejaba de que org.apache.http
clases como
org.apache.http.NameValuePair org.apache.http.client.utils.URLEncodedUtils
Estaban desaparecidos.
Así que he añadido org.apache.http.legacy.jar
que está en Android/Sdk/platforms/android-23/optional
carpeta Android/Sdk/platforms/android-23/optional
a app/libs
También agregué esta línea a mi archivo app.gradle
compile files('libs/org.apache.http.legacy.jar')
Pero si está utilizando más bibliotecas, puede utilizar esta manera
compile fileTree(dir: 'libs', include: ['*.jar'])
Esto resolvió todos mis errores que fueron causados porque el google quita la ayuda del cliente del HTTP de Apache.
UseLibrary 'org.apache.http.legacy' no funcionó para mí hasta que actualizé la versión de las herramientas Gradle en mi archivo build.gradle principal de mi proyecto de Android Studio, de la siguiente manera:
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }
Solución perfecta aquí corriendo una comprobación simple de la trayectoria del archivo. mediante la ejecución
android { compileSdkVersion 'android-MNC' buildToolsVersion "23.0.0 rc3" useLibrary 'org.apache.http.legacy' defaultConfig { applicationId "com.example.user.androidmtest" minSdkVersion 'MNC' targetSdkVersion 'MNC' versionCode 1 versionName "1.0" } getBootClasspath().each{File file -> println file.absolutePath } } }
Obtendrá algo como abajo
/Users/"yourname"/Development/android-sdk-macosx/platforms/android-MNC/android.jar /Users/"yourname"/Development/android-sdk-macosx/platforms/android-MNC/optional/org.apache .http.legacy.jar
Así que ahí vas, el tarro está ahí. Por alguna razón no se agregó al proyecto. Pero siempre se puede agregar manualmente, supongo.
Después de muchas horas frustrantes, lo siguiente funcionó:
1. Localice el tarro de apache. Debe residir en alguna parte como:
C:\Users\<yourname>\AppData\Local\Android\sdk\platforms\android-23\optional
2. Copie org.apache.http.legacy.jar
en su carpeta libs.
Haga clic derecho en libs -> paste, o utilice su explorador de archivos para navegar a la carpeta libs de su proyecto y pegar.
Si no tiene una carpeta de librerías, como lo hice, haga un nuevo proyecto e importe todos los archivos relevantes en sus respectivos lugares.
3. Haga clic en ok
ver esto
4. Paso más importante: Haga clic con el botón derecho en la carpeta apache y seleccione Add As Library
. mira esto
Espero que esto ayude a alguien a seguir adelante con su vida.
Sé que esto es una razón tonta, pero en la lista de intentarlo …
He experimentado este problema recientemente, y es causado por la restricción de longitud de camino creo que es 256 caracteres máximo.
Reubicar su proyecto y la construcción será succeed.Hope este trabajo para usted.
Biblioteca Apache de Legacy ubicada en
[ANDROID_SDK]\platforms\android-23\optional\org.apache.http.legacy.jar
Así que usted puede copiar dentro de su proyecto libs o simplemente usar
compile files("${android.getSdkDirectory().getAbsolutePath()}" + File.separator + "platforms" + File.separator + "android-23" + File.separator + "optional" + File.separator + "org.apache.http.legacy.jar")
En su /app/build.gradle
Primero tienes que comprobar que en la carpeta de librerías
Then add into your gradle file like this android { compileSdkVersion 23 buildToolsVersion '23.0.2' defaultConfig { applicationId "info.tranetech.laundry" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } android { useLibrary 'org.apache.http.legacy' } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1 compile 'com.android.support:design:23.0.1 testCompile 'junit:junit:4.12' compile files('libs/android-async-http-1.4.4.jar') compile 'com.google.android.gms:play-services:8.4.0' }
La respuesta anterior sólo ayuda a que las compilaciones de depuración se ejecuten y las versiones de lanzamiento que utilizan gradle.
Inserte esto dentro de la etiqueta de aplicación en el archivo de manifiesto, en todas las instancias de proyecto que utilizan las clases de apache legacy:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
Esto ayuda a aquellos que siguen utilizando scripts Eclipse y ant durante la compilación.
Habilitar esto en sdk / platforms / android-23 / optional / optional.json
[ { "name": "org.apache.http.legacy", "jar": "org.apache.http.legacy.jar", "manifest": false } ]
retirar
useLibrary 'org.apache.http.legacy'
Desde el build.gradle y también he añadido esta línea a mi archivo app.gradle
compile files('libs/org.apache.http.legacy.jar')
Pero si está utilizando más bibliotecas, puede utilizar esta manera
compile fileTree(dir: 'libs', include: ['*.jar'])
La respuesta de CoPLaS solucionó mis problemas.
¿Cómo usar el cliente Apache HTTP heredado en Android Marshmallow?
Para continuar utilizando las clases HTTP de Apache para API 23+:
En primer lugar, asegúrese de añadir el gradle dependencie en el build.gradle
f
buildscript { dependencies { classpath 'com.android.tools.build:gradle:2.0.0' } }
A continuación, agregue la referencia dentro de build.gradle
de su proyecto:
android { compileSdkVersion 23 buildToolsVersion "23.0.0" useLibrary 'org.apache.http.legacy' ... }
Una forma sencilla de resolver este problema es C: \ Usuarios \ nombreDeUsuario \ AppData \ Local \ Android \ sdk \ platformas. Aquí elimine su android-23 y del gestor de SDK actualice su API 23 de nuevo. Resolverá su problema.