Antecedentes
En Android Marshmallow, Google ha eliminado por completo la compatibilidad con el cliente HTTP Apache (enlace aquí ) porque no tiene un buen rendimiento en comparación con las alternativas.
Esta también podría ser la causa de que muchas aplicaciones se bloqueen en Android Marshmallow.
El problema
Google le permite seguir usando esta API, pero no como una integrada, agregando esta línea al archivo gradle:
useLibrary 'org.apache.http.legacy'
Entonces, 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 probé, se compiló bien (no se muestran errores y pude ejecutar la aplicación de prueba de concepto, ya que no tiene ningún código especial), pero cuando intenté usar algunas de las clases, sé que son parte de la antigua API (como la clase "HttpClient"), veo que no me permite hacerlo.
Sé que no se recomienda usar esta solución, pero debemos tener la aplicación lista para funcionar allí al menos temporalmente, hasta que trabajemos al 100% en todas las cosas que deberían cambiar para Android Marshmallow, y no queremos sorpresas en el forma de choques.
Aquí hay una captura de pantalla:
La pregunta
¿Por qué ocurre? ¿Lo usé correctamente?
EDITAR: informó sobre este problema aquí:
fuente
Respuestas:
Android Studio se quejaba de que
org.apache.http
clases comofaltaban.
Así que agregué
org.apache.http.legacy.jar
cuál está en laAndroid/Sdk/platforms/android-23/optional
carpeta aapp/libs
También agregué esta línea a mi
app.gradle
archivocompile files('libs/org.apache.http.legacy.jar')
Pero si está usando más bibliotecas, puede usar de esta manera
compile fileTree(dir: 'libs', include: ['*.jar'])
Esto resolvió todos mis errores causados porque Google eliminó el soporte del cliente HTTP Apache.
fuente
IOExcpetion: Can't write [path to classes.jar] (Can't read [path to libs/org.apache.http.legacy.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [org.apache.http.legacy.jar:org/apache/commons/codec/binary/Hex.class]))
Alguien más usa Proguard? ¿Algunas ideas?useLibrary 'org.apache.http.legacy' no funcionó para mí hasta que actualicé la versión de las herramientas de Gradle en mi archivo principal build.gradle de mi proyecto de Android Studio, de la siguiente manera:
dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }
fuente
Solución perfecta aquí ejecutando una simple verificación de ruta de 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ás algo como a continuación
Así que ahí lo tienes, el frasco está ahí. Por alguna razón, no se agregó al proyecto. pero siempre puedes agregarlo manualmente, supongo.
fuente
Después de muchas horas frustrantes, funcionó lo siguiente:
1. Localice el frasco de Apache. Debería residir en algún lugar como:
C:\Users\<yourname>\AppData\Local\Android\sdk\platforms\android-23\optional
2. Copie
org.apache.http.legacy.jar
a su carpeta libs.Haga clic derecho en libs -> pegar, o use su explorador de archivos para navegar a la carpeta libs de su proyecto y pegar.
Si no tiene una carpeta libs, como yo, cree un nuevo proyecto e importe todos los archivos relevantes en sus respectivos lugares.
3. Haga clic en
ok
ver esto4. Paso más importante: haga clic derecho en la carpeta de apache y seleccione
Add As Library
. mira estoEspero que esto ayude a alguien a seguir adelante con su vida.
fuente
La respuesta anterior solo ayuda a que se ejecuten las compilaciones de depuración y a lanzar compilaciones que utilizan gradle.
Inserte esto dentro de la etiqueta de la aplicación en el archivo de manifiesto, en todas las instancias del proyecto que usan las clases de apache heredadas:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
Esto ayuda a aquellos que todavía están usando Eclipse y scripts ant durante la compilación.
fuente
Sé que esta es una razón tonta, pero en la lista pruébalo ...
Experimenté este problema recientemente, y es causado por la restricción de la longitud de la ruta. Creo que es un máximo de 256 caracteres.
Reubique su proyecto y la construcción tendrá éxito. Espero que esto funcione para usted.
fuente
Biblioteca de Apache heredada ubicada en
[ANDROID_SDK]\platforms\android-23\optional\org.apache.http.legacy.jar
Entonces puede copiarlo dentro de sus bibliotecas de proyecto 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
fuente
Primero tienes que verificar eso en tu carpeta libs
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' }
fuente
Habilite esto en sdk / platform / android-23 / Optional / Optional.json
[ { "name": "org.apache.http.legacy", "jar": "org.apache.http.legacy.jar", "manifest": false } ]
fuente
Eliminar
useLibrary 'org.apache.http.legacy'
desde build.gradle y también agregué esta línea a mi archivo app.gradle
compile files('libs/org.apache.http.legacy.jar')
Pero si está usando más bibliotecas, puede usar de esta manera
compile fileTree(dir: 'libs', include: ['*.jar'])
La respuesta de CoPLaS solucionó mis problemas.
fuente
Para continuar usando las clases HTTP de Apache para API 23+:
En primer lugar, asegúrese de agregar la dependencia de gradle en la
build.gradle
fbuildscript { dependencies { classpath 'com.android.tools.build:gradle:2.0.0' } }
Luego agregue la referencia dentro
build.gradle
de su proyecto:android { compileSdkVersion 23 buildToolsVersion "23.0.0" useLibrary 'org.apache.http.legacy' ... }
fuente
Una forma sencilla de resolver este problema es C: \ Users \ username \ AppData \ Local \ Android \ sdk \ platform. Aquí borre su android-23 y desde SDK manager actualice su API 23 nuevamente. Resolverá tu problema.
fuente