studio - ¿Android Gradle Apache HttpClient no existe?
httpclient android studio example (15)
Agregue esta biblioteca a
build.gradle
android {
useLibrary ''org.apache.http.legacy''
}
¿Estoy tratando de convertir un proyecto IntelliJ al sistema Gradle de Android Studio pero me encuentro con errores con Apache HttpClient? Me falta algo, los errores que obtengo son los siguientes:
Error:(10, 30) error: package org.apache.http.client does not exist
Error:(11, 30) error: package org.apache.http.client does not exist
Error:(12, 37) error: package org.apache.http.client.entity does not exist
Error:(13, 38) error: package org.apache.http.client.methods does not exist
Error:(14, 38) error: package org.apache.http.client.methods does not exist
Error:(15, 38) error: package org.apache.http.client.methods does not exist
Error:(16, 35) error: package org.apache.http.impl.client does not exist
Error:(134, 33) error: cannot find symbol class HttpUriRequest
Error:(164, 39) error: cannot find symbol class HttpUriRequest
Error:(106, 17) error: cannot find symbol class HttpGet
Error:(106, 39) error: cannot find symbol class HttpGet
Error:(117, 17) error: cannot find symbol class HttpPost
Error:(117, 40) error: cannot find symbol class HttpPost
Error:(125, 43) error: cannot find symbol class UrlEncodedFormEntity
Error:(135, 9) error: cannot find symbol class HttpClient
Error:(135, 33) error: cannot find symbol class DefaultHttpClient
Error:(155, 18) error: cannot find symbol class ClientProtocolException
Error:(165, 9) error: cannot find symbol class HttpClient
Error:(165, 33) error: cannot find symbol class DefaultHttpClient
Error:(185, 18) error: cannot find symbol class ClientProtocolException
Mi archivo build.gradle tiene las siguientes dependencias:
dependencies {
compile ''com.google.android.gms:play-services:+''
compile ''org.apache.httpcomponents:httpclient:4.2.6''
compile ''org.apache.httpcomponents:httpmime:4.2.6''
compile files(''libs/core.jar'')
}
Parece que muchas personas tienen un problema similar, pero ni SO ni Google tienen una solución, por lo que espero que esta pregunta ayude a los futuros buscadores.
Básicamente, todo lo que necesita hacer es agregar:
useLibrary ''org.apache.http.legacy''
A su archivo
build.gradle
.
Cloné lo siguiente: https://github.com/google/play-licensing
Luego importé eso en mi proyecto.
Después de pasar días sobre el tema, finalmente pude resolverlo. Desafortunadamente, lo necesitamos si queremos usar archivos de expansión. La solución ha sido proporcionada por algunas personas aquí, pero para mí las respuestas no incluían algunos detalles menores que podrían haberme ahorrado mucho tiempo. Aquí está la secuencia de eventos para principiantes como yo para ahorrar su valioso tiempo.
Primero importé la carpeta "biblioteca" de D: / Users / Imre / AppData / Local / Android / sdk1 / extras / google / play_licensing al proyecto yendo a Archivo, Nuevo, Módulo de importación y navegando a la carpeta "biblioteca". Si abres el SDK Manager y haces clic en "Iniciar Standalone SDK Manager" en la parte inferior de la pantalla emergente, puedes pasar el puntero sobre la carpeta "Extras" en la parte inferior y la pequeña información amarilla te dirá dónde encontrarás El paquete que necesita importar.
Una vez hecho esto, vaya a la sección "biblioteca" en el panel izquierdo con "Proyecto" y dentro de ella la pestaña "Android" abierta. Abra la sección de Java de la biblioteca y abra la clase APKExpansionPolicy. Si tiene errores y la importación org.apache.http.NameValuePair y la importación org.apache.http.client.utils.URLEncodedUtils son de color gris pálido, abra build.gradle (Proyecto: lo que sea) y asegúrese de que en "buildscript" bajo "dependencias" tiene el "classpath ''com.android.tools.build:gradle:1.5.0" incluido. El 1.5.0 puede ser diferente en su caso. Supongo que depende de tu versión de Studio. El mío es 1.5.1. Si el suyo es más nuevo, se le recordará que actualice los números.
Después de eso, vaya a "build.gradle (Módulo: biblioteca) e incluya el" useLibrary ''org.apache.http.legacy'' en la sección "android". Sincronizar ahora (esquina superior izquierda / derecha) debe ofrecerse. Hazlo.
Si recibe más mensajes de error (no lo sabría porque lo hice al revés), los archivos de Apache pueden faltar en su proyecto, ya que apache ya no es compatible. Encuéntrelos en C / D: Usuarios / Yourname / AppData / Local / Android / Sdk / plataformas / android-23 / opcional y cópielos / péguelos en su carpeta project / app / libs. Debe tener un archivo opcional.json y un archivo org.apache.http.legacy.jar allí. Es mejor que vaya al sitio web de apache y descargue la versión más reciente: http://hc.apache.org/downloads.cgi Descomprímalo donde desee, ábralo, vaya a "lib", copie el httpclient-4.5.1 .jar y reemplace el archivo org.apache.http.legacy.jar con él.
Sincronice y reconstruya / limpie su proyecto y debería estar listo.
Por si acaso, abra su terminal (parte inferior izquierda de Android Studio) y escriba "gradlew clean". Instalará algunas cosas. Una vez hecho, escriba "gradlew assemble". Tardará unos minutos en terminar, pero le dará los errores si tiene alguno, por supuesto. Si no puede escribir nada en la Terminal, inicie el símbolo del sistema (botón de Windows + R), escriba cmd, presione OK, haga clic derecho en el título de la pequeña pantalla emergente negra (C: / WINDOWS / system32 / cmd.exe) , Propiedades, Opciones, en la parte inferior de la ventana, verifique que "Usar consola heredada" esté grueso. Reinicie A.Studio.
¡Buena suerte!
En mi caso, actualicé una de mis bibliotecas en mi proyecto de Android.
Estoy usando Reservoir como mi solución de almacenamiento en caché: https://github.com/anupcowkur/Reservoir
Yo fui de:
compile ''com.anupcowkur:reservoir:2.1''
A:
compile ''com.anupcowkur:reservoir:3.1.0''
El autor de la biblioteca debe haber eliminado la biblioteca commons-io del repositorio para que mi aplicación ya no funcione.
Tuve que incluir manualmente el commons-io agregando esto en gradle:
compile ''commons-io:commons-io:2.5''
https://mvnrepository.com/artifact/commons-io/commons-io/2.5
Esto es lo que hice, y funciona para mí.
Paso 1: agregue esto en build.grade (módulo: aplicación)
compile ''org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2''
Paso 2: sincroniza el proyecto y listo.
La versión del cliente HTTP Apache que se proporciona en el stock de Android era muy, muy antigua .
Google Android 1.0 se lanzó con una instantánea anterior a BETA de Apache HttpClient. Para coincidir con la primera versión de Android, las API de Apache HttpClient 4.0 tuvieron que congelarse prematuramente, mientras que muchas de las interfaces y estructuras internas todavía no se resolvieron por completo. A medida que Apache HttpClient 4.0 estaba madurando, el proyecto esperaba que Google incorporara las últimas mejoras de código en su árbol de códigos. Lamentablemente no sucedió.
Si bien
puede
seguir usando la antigua biblioteca obsoleta a través de la solución alternativa
useLibrary ''org.apache.http.legacy''
de useLibrary (sugerida por @Jinu y otros), realmente necesita morder la viñeta y actualizar a otra cosa, por ejemplo, la Android
HttpUrlConnection
nativa , o si eso no satisface sus necesidades, puede usar la
biblioteca OkHttp
, que es en lo que
HttpUrlConnection
se
basa internamente de
todos modos.
OkHttp en realidad tiene una capa de compatibilidad que usa la misma API que el cliente Apache, aunque no implementan todas las mismas características, por lo que su kilometraje puede variar.
Si bien es posible importar una versión más nueva del cliente Apache (como lo sugiere @MartinPfeffer), es probable que la mayoría de las clases y métodos que estaba utilizando hayan quedado en desuso, y existe un riesgo bastante grande de que la actualización introduzca errores. en su código (por ejemplo, encontré algunas conexiones que anteriormente funcionaban desde atrás de un proxy que ya no funcionaban), por lo que esta no es una gran solución.
Le sugiero que reemplace el obsoleto apache HttpClient con el nuevo HttpURLConnection.
Esa es una solución más limpia, es bastante fácil de migrar y, en general, es mejor atenerse a los últimos cambios del SDK que intentar piratear / parchear / solucionar el problema: por lo general, lo lamentarás más tarde :)
Paso 1
HttpGet httpGet = new HttpGet(url);
se convierte en:
URL urlObj = new URL(url);
Paso 2
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpGet, localContext);
InputStream is = response.getEntity().getContent();
se convierte en:
HttpURLConnection urlConnection = (HttpURLConnection) urlObj.openConnection();
InputStream is = urlConnection.getInputStream();
Paso 2 bis
int status = response.getStatusLine().getStatusCode();
se convierte en:
int status = urlConnection.getResponseCode();
Me encontré con el mismo problema.
La respuesta de Daniel Nugent ayudó un poco (después de seguir su consejo, se encontró
HttpClient
, pero aún faltaba el
HttpClient
).
Entonces, esto es lo que me arregló:
- (si aún no lo ha hecho, recomiende las declaraciones de importación anteriores)
- visite http://hc.apache.org/downloads.cgi
-
obtener el
4.5.1.zip
de la sección binaria -
descomprímalo y pegue
httpcore-4.4.3
&httpclient-4.5.1.jar
en la carpetaproject/libs
- haga clic derecho en el jar y elija Agregar como biblioteca .
Espero eso ayude.
Me encontré con problemas similares, es posible que pueda hacer que funcione con un método similar.
Primero, intente esto con su configuración actual, excluya
httpclient
de
httpmime
:
dependencies {
compile ''com.google.android.gms:play-services:+''
compile (''org.apache.httpcomponents:httpmime:4.2.6''){
exclude module: ''httpclient''
}
compile ''org.apache.httpcomponents:httpclient:4.2.6''
}
En mi caso, lo arreglé usando los siguientes frascos:
Luego, en build.gradle, excluyendo
httpclient
de
httpmime
:
dependencies {
compile ''com.google.android.gms:play-services:+''
compile(''org.apache.httpcomponents:httpmime:4.3.5'') {
exclude module: ''httpclient''
}
compile ''org.apache.httpcomponents:httpclient-android:4.3.5.1''
}
Respuesta perfecta de Jinu y Daniel
Agregando a esto resolví el problema usando esto, si su compileSdkVersion es 19 (EN MI CASO)
compile (''org.apache.httpcomponents:httpmime:4.3''){
exclude group: ''org.apache.httpcomponents'', module: ''httpclient''
}
compile (''org.apache.httpcomponents:httpcore:4.4.1''){
exclude group: ''org.apache.httpcomponents'', module: ''httpclient''
}
compile ''commons-io:commons-io:1.3.2''
de lo contrario, si su compileSdkVersion es 23, use
android {
useLibrary ''org.apache.http.legacy''
packagingOptions {
exclude ''META-INF/DEPENDENCIES''
exclude ''META-INF/NOTICE''
exclude ''META-INF/LICENSE''
exclude ''META-INF/LICENSE.txt''
exclude ''META-INF/NOTICE.txt''
}
}
Tuve este problema y luego encontré estas páginas: Aquí puede ver que la biblioteca apache está en desuso, pero no se ha eliminado, por lo que debería funcionar. No lo hace.
Y aquí puede ver cómo incluir la biblioteca apache en su proyecto
Resolví el problema agregando lo siguiente a mi archivo build.gradle como se recomienda en el segundo enlace.
android {
useLibrary ''org.apache.http.legacy''
}
Sin embargo, esto solo funciona si está utilizando gradle 1.3.0-beta2 o superior, por lo que tendrá que agregar esto a las dependencias de buildscript si está en una versión inferior:
classpath ''com.android.tools.build:gradle:1.3.0-beta2''
Espero que esto ayude.
Tuve que publicar ya que ninguna de las respuestas anteriores funcionó completamente para mí.
Estoy usando Android Studio
classpath ''com.android.tools.build:gradle:1.5.0''
compileSdkVersion 23
buildToolsVersion "23.0.3"
Paso 1: descargue el último archivo jar ( http://www-eu.apache.org/dist//httpcomponents/httpclient/binary/httpcomponents-client-4.5.2-bin.zip )
Paso 2: Copie y pegue el archivo .jar en la carpeta libs (crear si aún no existe) en su módulo (puede ser una aplicación o biblioteca)
Paso 3: Haz clic derecho en el frasco y "Agregar como biblioteca". Agregará automáticamente el archivo jar como una dependencia en el archivo gradle de su módulo
Paso 4: ahora su problema se resolverá automáticamente, pero en caso de que esté utilizando proguard en su aplicación, le dará una advertencia sobre archivos de clase duplicados y no le permitirá compilar. Es un error conocido y debe agregar lo siguiente a sus reglas de protección
-dontwarn org.apache.commons.**
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
¡Buena suerte!
copie
org.apache.http.legacy.jar
que está en la
Android/Sdk/platforms/android-23/optional
a
app/libs
y también agregó esta línea al archivo app.gradle
compile files(''libs/org.apache.http.legacy.jar'')
Pero si está usando más bibliotecas jar, puede usar de esta manera
compile fileTree(dir: ''libs'', include: [''*.jar''])
si está utilizando el SDK de destino como 23, agregue el siguiente código en su build.gradle
android{
compileSdkVersion 23
buildToolsVersion ''23.0.1''
useLibrary ''org.apache.http.legacy''
}
y cambia tu buildscript a
classpath ''com.android.tools.build:gradle:1.3.0''
para más información sigue este link