java - org - including apache http client on android studio
¿Cómo usar el cliente HTTP Apache heredado en Android Marshmallow? (12)
¿Cómo usar el cliente HTTP Apache heredado en Android Marshmallow?
Para continuar usando las clases Apache HTTP para API 23+:
En primer lugar, asegúrese de agregar la dependencia de gradle en
build.gradle
f
buildscript {
dependencies {
classpath ''com.android.tools.build:gradle:2.0.0''
}
}
Luego agregue la referencia dentro de
build.gradle
de su proyecto:
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary ''org.apache.http.legacy''
...
}
Fondo
En Android Marshmallow, Google ha eliminado por completo el soporte del cliente Apache HTTP (enlace here ) 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 utilizando 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 accidentes
Aquí hay una captura de pantalla:
La pregunta
¿Por qué ocurre? ¿Lo usé correctamente?
EDITAR: informó sobre este problema aquí:
Android Studio se quejaba de que las clases
org.apache.http
como
org.apache.http.NameValuePair
org.apache.http.client.utils.URLEncodedUtils
faltaban
Entonces agregué
org.apache.http.legacy.jar
que está en la
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á usando más bibliotecas, puede usar de esta manera
compile fileTree(dir: ''libs'', include: [''*.jar''])
Esto resolvió todos mis errores causados porque Google eliminó la compatibilidad con el cliente HTTP Apache.
Biblioteca de Apache heredada ubicada en
[ANDROID_SDK]/platforms/android-23/optional/org.apache.http.legacy.jar
Para que pueda copiarlo dentro de las bibliotecas de su 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 tu /app/build.gradle
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
4. Paso más importante: haga clic derecho en la carpeta apache y seleccione
Add As Library
.
mira esto
Espero que esto ayude a alguien a seguir adelante con su vida.
Habilite esto en sdk / plataformas / android-23 / optional / optional.json
[
{
"name": "org.apache.http.legacy",
"jar": "org.apache.http.legacy.jar",
"manifest": false
}
]
La respuesta anterior solo ayuda a ejecutar las compilaciones de depuración y libera compilaciones que utilizan gradle.
Inserte esto dentro de la etiqueta de la aplicación en el archivo de manifiesto, en todas las instancias de 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 usan Eclipse y scripts de hormiga durante la compilación.
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''
}
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 longitud de ruta, creo que tiene un máximo de 256 caracteres.
Reubique su proyecto y la construcción tendrá éxito. Espero que esto funcione para usted.
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
/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
Ahí lo tienes, el frasco está allí. Por alguna razón, no se agregó al proyecto. pero siempre puedes agregarlo manualmente, supongo.
Una forma simple de resolver este problema es C: / Users / username / AppData / Local / Android / sdk / plataformas. Aquí elimine su android-23 y desde el administrador de SDK actualice su API 23 nuevamente. Resolverá tu problema.
retirar
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.
useLibrary ''org.apache.http.legacy'' no funcionó para mí hasta que actualicé la versión de las herramientas de 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''
}