Android Gradle Apache HttpClient no existe?

Estoy tratando de convertir un proyecto IntelliJ al sistema Gradle de Android Studio, pero me estoy encontrando con errores con Apache HttpClient? Me estoy perdiendo algo, los errores que estoy obteniendo 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 mucha gente está teniendo un problema similar, pero ni SO ni Google tienen una solución, así que espero que esta pregunta ayude a los futuros buscadores.

Le sugiero que reemplace el apache HttpClient obsoleto con el nuevo HttpURLConnection.

Esa es una solución más limpia, es bastante fácil de migrar y, en general, es mejor seguir los últimos cambios de SDK que tratar de hackear / parchar / solucionar: normalmente 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(); 

si usa sdk como objective 23, agregue el código siguiente 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 siga este enlace

Tuve este problema y luego encontré estas páginas: aquí puede ver que la biblioteca de Apache está en desuso, pero no se elimina, por lo que debería funcionar. No es así

Ver .

Y aquí puedes ver cómo incluir la biblioteca apache en tu proyecto

Ver .

Resolví el problema agregando el siguiente archivo build.gradle como se recomienda en el segundo enlace.

 android { useLibrary 'org.apache.http.legacy' } 

Sin embargo, esto solo funciona si usa gradle 1.3.0-beta2 o superior, por lo que tendrá que agregar esto a las dependencias de buildscript si se encuentra en una versión inferior:

 classpath 'com.android.tools.build:gradle:1.3.0-beta2' 

Espero que esto ayude.

copie org.apache.http.legacy.jar que se encuentra en la Android/Sdk/platforms/android-23/optional en la app/libs

y también agregó esta línea al archivo app.gradle

 compile files('libs/org.apache.http.legacy.jar') 

Pero si usa más librerías jar, puede usar de esta manera

 compile fileTree(dir: 'libs', include: ['*.jar']) 

Agregue esta biblioteca a Build.Gradle

  android { useLibrary 'org.apache.http.legacy' } 

Espero que funcione

Básicamente todo lo que necesita hacer es agregar:

 useLibrary 'org.apache.http.legacy' 

Para su archivo build.gradle.

Me encontré con el mismo problema. La respuesta de Daniel Nugent ayudó un poco (después de seguir su consejo, se encontró HttpClient , pero el HttpClient aún faltaba).

Así que aquí está lo que me solucionó:

  1. (si aún no lo ha hecho, recomiende declaraciones de importación anteriores)
  2. visite http://hc.apache.org/downloads.cgi
  3. obtener el 4.5.1.zip de la sección binaria
  4. descomprimirlo y pegar httpcore-4.4.3 & httpclient-4.5.1.jar en la carpeta project/libs
  5. 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 las siguientes jarras:

  • httpclient-android-4.3.5.1.jar
  • httpmime-4.3.5.jar

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 por Jinu y Daniel

Agregando a esto resolví el problema mediante el uso de 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' 

si tu compileSdkVersion es 23 entonces usa

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

Esto es lo que hice, y funciona para mí.

paso 1: agregar esto en build.grade (module: app)

 compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' 

paso 2: sincronizar el proyecto y listo.

La versión del cliente Apache HTTP proporcionado en stock de Android era muy antigua .

Google Android 1.0 fue lanzado con una instantánea pre-BETA de Apache HttpClient. Para coincidir con la primera versión de Android, las API de Apache HttpClient 4.0 tuvieron que ser congeladas prematuramente, mientras que muchas de las interfaces y estructuras internas aún no estaban completamente resueltas. Cuando 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 podría seguir usando la antigua biblioteca obsoleta a través de la useLibrary 'org.apache.http.legacy' (sugerida por @Jinu y otros), realmente necesita morder la viñeta y actualizar a otra cosa, por ejemplo, la HttpUrlConnection nativa de Android HttpUrlConnection , o si eso no satisface sus necesidades, puede usar la biblioteca OkHttp , que es de 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 millaje 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 utilizaba anteriormente hayan quedado obsoletos, y existe un riesgo bastante grande de que la actualización introduzca errores. en su código (por ejemplo, encontré que algunas conexiones que anteriormente funcionaban desde detrás de un proxy ya no funcionaban), así que esta no es una gran solución.

Después de pasar días sobre el tema, logré resolverlo finalmente. 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 carecían de algunos detalles menores que podrían haberme ahorrado mucho tiempo. Aquí está la secuencia de eventos para principiantes como yo para guardar 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, Importar módulo y navegando a la carpeta “biblioteca”. Si abre el administrador de SDK y hace clic en “Iniciar Standalone SDK Manager” en la parte inferior de la pantalla emergente, puede colocar el puntero sobre la carpeta “Extras” en la parte inferior y la pequeña información amarilla le indicará dónde encontrará el paquete que necesitas importar

Una vez hecho esto, vaya a la sección “biblioteca” en el panel izquierdo con “Proyecto” y dentro de él, abra la pestaña “Android”. Abra la sección 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 (Project: whatever) y asegúrese de que en “buildscript” en “dependencias” tiene el “classpath” com.android.tools.build:gradle:1.5.0 “incluido. El 1.5.0 podría ser diferente en tu caso. Supongo que depende de tu versión de Studio. El mío es 1.5.1. Si el tuyo es más reciente, se te recordará que actualices los números.

Después de eso, vaya a “build.gradle (Module: library) e incluya la” useLibrary “org.apache.http.legacy” en la sección “android”. Se debe ofrecer Sync Now (R / H esquina superior). Hazlo.

Si recibe más mensajes de error (no lo sabría porque lo hice al revés), es posible que los archivos Apache no se encuentren en su proyecto, ya que ya no se admite Apache. Encuéntrelos en C / D: Users / Yourname / AppData / Local / Android / Sdk / platforms / android-23 / optional y cópielos / péguelos en la carpeta de su proyecto / aplicación / libs. Debería tener un archivo opcional.json y un archivo org.apache.http.legacy.jar allí. Es mejor que vayas al sitio web de Apache y descargues la versión más nueva: http://hc.apache.org/downloads.cgi Descomprímelo en cualquier lugar que desees, ábrelo, ve a “lib”, copia el httpclient-4.5.1 archivo .jar y reemplace el archivo org.apache.http.legacy.jar con él.

Sincronice y reconstruya / limpie su proyecto y debería ser bueno ir.

Por las dudas, abra su terminal (parte inferior de L / H 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 el terminal, ejecute el símbolo del sistema (botón de Windows + R), escriba cmd, pulse Aceptar, haga clic con el botón derecho en el título de la pequeña ventana emergente negra (C: \ WINDOWS \ system32 \ cmd.exe) , Propiedades, Opciones, en la parte inferior de la ventana, compruebe que “Usar consola heredada” esté grueso. Reinicie A.Studio.

¡Buena suerte!

Tuve que publicar porque ninguna de las respuestas anteriores funcionó por completo 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 ya no existe) en su módulo (puede ser una aplicación o biblioteca)

Paso 3: haz clic con el botón derecho en el contenedor y “Agregar como biblioteca”. Se agregará automáticamente el archivo jar como una dependencia en el archivo Gradle de su módulo

Paso 4: Ahora automáticamente su problema se resolverá, pero en caso de que esté usando proguard en su aplicación, le dará una advertencia sobre los archivos duplicados de la clase y no le permitirá comstackr. Es un error conocido y debe agregar siguiente a sus reglas de proguard

 -dontwarn org.apache.commons.** -keep class org.apache.http.** { *; } -dontwarn org.apache.http.** 

¡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

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 repository 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

Cloné lo siguiente: https://github.com/google/play-licensing

Luego lo importé en mi proyecto.