¿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.

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:

Introduzca aquí la descripción de la imagen

La pregunta

¿Por qué ocurre? ¿Lo usé correctamente?


EDIT: informó sobre este problema aquí:

Https://code.google.com/p/android/issues/detail?id=181474

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

Asegúrese de que en Libs Folder Compruebe que apache biblioteca

 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' } 

Este es mi archivo gradle

También compruebe la biblioteca externa

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.

  • ¿Cuál es la diferencia entre Extends Application y Extends Activity en Android?
  • Android - Cómo manejar el toque de dos dedos
  • Cómo convertir de fracción de la cadena formateada en Decimal o Float en Java?
  • Enviar y recibir sobre el mismo socket
  • Cómo llamar a un método Java desde C ++ / JNI que toma un parámetro de Contexto de Android
  • Recomendaciones para producir aplicaciones portátiles entre Android y "otras plataformas"
  • Fuga de memoria de Android?
  • Uso de Socket.IO en Android siempre devuelve error de sondeo XHR
  • Conectar el dispositivo android a través de MQTT con ssl
  • Crear una clase general para el cuadro de diálogo personalizado en java Android
  • Calcular el número de semanas en un año determinado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.