Android Gradle Apache HttpClient no existe?


Estoy tratando de convertir un proyecto IntelliJ al sistema Gradle de Android Studio, pero estoy teniendo errores con Apache HttpClient? Estoy perdiendo algo, los errores que estoy recibiendo 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 constitución.el archivo 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 TAN ni Google tienen una solución, así que espero que esta pregunta ayude a los futuros buscadores.

Author: Apqu, 2015-07-15

15 answers

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 generalmente es mejor atenerse a los últimos cambios del SDK que intentar hackear / patch / workaround: generalmente te arrepientes 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();
 34
Author: Benjamin Piette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-27 07:49:36

Si está utilizando el sdk de destino como 23, agregue el siguiente código en su compilación.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 link

 498
Author: Jinu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-28 14:20:17

Tuve este problema y luego encontré estas páginas: Aquí puede ver que la biblioteca de Apache está obsoleta, pero no se ha eliminado, por lo que debería funcionar. No lo hace.

Véase .

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

Véase .

Resolví el problema agregando lo siguiente a mi compilación.archivo 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.

 85
Author: Milos Savanovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-28 14:23:26

Copiar org.apache.http.legacy.jar que está en Android/Sdk/platforms/android-23/optional carpeta a a app/libs

Y también agregó esta línea a la aplicación.gradle file

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

Pero si estás usando más bibliotecas jar, puedes usar de esta manera

compile fileTree(dir: 'libs', include: ['*.jar'])
 36
Author: do01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-06 09:09:37

Agregue esta biblioteca a la compilación.Gradle

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

Espero que sus obras.

 29
Author: Darshan Dhoriya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-09 08:04:38

Básicamente todo lo que necesita hacer es agregar:

useLibrary  'org.apache.http.legacy'

A tu compilación.archivo gradle.

 10
Author: ATechPerson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-01 07:04:42

Me encontré con el mismo problema. La respuesta de Daniel Nugent ayudó un poco (después de seguir su consejo HttpResponse fue encontrado-pero el HttpClient todavía faltaba).

Así que esto es lo que lo arregló para mí:

  1. (si aún no lo ha hecho, recomiende las declaraciones de importación anteriores)
  2. visita http://hc.apache.org/downloads.cgi
  3. obtenga el 4.5.1.zip de la sección binaria
  4. descomprímelo y pégalo httpcore-4.4.3 & httpclient-4.5.1.jar en la carpeta project/libs
  5. haga clic con el botón derecho en el frasco y elija Añadir como biblioteca.

Espero que ayude.

 9
Author: Martin Pfeffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-25 10:09:04

Me encontré con problemas similares, es posible que pueda hacerlo funcionar utilizando un método similar.

Primero, prueba esto con tu configuración actual, excluye 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:

Entonces, en la construcción.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'
}
 9
Author: Daniel Nugent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-02 10:39:47

Respuesta perfecta de Jinu y Daniel

Añadiendo 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 a continuación, utilice

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'
    }
}
 7
Author: Sophia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-08 09:45:32

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

Paso 1: agregue esto en la compilación.grado (módulo: app)

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.

 5
Author: NOT_A_PROGRAMMER,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-28 13:57:24

La versión del cliente HTTP Apache proporcionada en stock Android era muy 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 congelarse prematuramente, mientras que muchas de las interfaces y estructuras internas aún no estaban completamente desarrolladas. 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. Desafortunadamente no sucedió.

Mientras que podría seguir usando la antigua biblioteca obsoleta a través de la solución useLibrary 'org.apache.http.legacy' (sugerida por @Jinu y otros), realmente necesita morder la bala y actualizar a otra cosa, por ejemplo, el Android nativoHttpUrlConnection, o si eso no satisface sus necesidades, puede usar la biblioteca OkHttp , que es lo que HttpUrlConnectiones internamente basada en de todos modos.

OkHttp realmente tiene un capa de compatibilidadque utiliza la misma API que el cliente Apache, aunque no implementa todas las de las mismas características, por lo que su kilometraje puede variar.

Mientras que es posible importar una versión más nueva del cliente Apache (como sugiere @MartinPfeffer), es probable que la mayoría de las clases y métodos que estaba usando antes hayan sido obsoletos, y hay un riesgo bastante grande de que la actualización introduzca errores en su código (por ejemplo, encontré las conexiones que anteriormente funcionaban desde detrás de un proxy ya no funcionaban), por lo que esta no es una gran solución.

 1
Author: Tim Rae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:05

Después de pasar días en el tema, me las arreglé para resolver 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 faltaban algunos detalles menores que podrían haber ahorrado mucho tiempo para mí. Aquí está la secuencia de eventos para novatos como yo para ahorrar su precioso tiempo.

Primero importé la carpeta "library" de D:\Users\Imre\AppData\Local\Android\sdk1\extras\google\play_licensing a la proyecto entrando en Archivo, Nuevo, Módulo de importación y navegando a la carpeta "biblioteca". Si abre el SDK Manager y hace clic en " Launch Standalone SDK Manager "en la parte inferior de la pantalla emergente, puede pasar el puntero sobre la carpeta" Extras " en la parte inferior y la pequeña información amarilla le dirá dónde encontrará el paquete que necesita importar.

Una vez hecho esto, baja a la sección "biblioteca" en el panel izquierdo con "Proyecto" y dentro de ella la pestaña "Android" abierta. Abra la sección java de la biblioteca y abra la clase APKExpansionPolicy. Si tiene errores y la organización de importación.apache.http.NameValuePair y la organización de importación.apache.http.cliente.utils.URLEncodedUtils son de color gris pálido, abrir la construcción.gradle (Project: whatever) y asegúrate de que en "buildscript" bajo "dependancies" tienes el "classpath 'com.androide.herramienta.construcción: gradle: 1.5.0 " incluido. La 1.5.0 podría ser diferente en su caso. Supongo que depende de tu versión de estudio. El mío es 1.5.1. Si el suyo es más reciente, se le recordará que actualice los números.

Después de eso, vaya a "build.gradle (Module: library)e incluye la org "useLibrary'.apache.http.legacy 'en la sección"android". Sincronización Ahora (R/H esquina superior) debe ser ofrecido. Haciéndolo.

Si recibe más mensajes de error (no lo sabría porque lo hice al revés), los archivos Apache podrían faltar en su proyecto, ya que Apache ya no es compatible. Encontrar en C / D: Users / Yourname/AppData/Local/Android/Sdk/platforms/android-23/opcional y cópielos/péguelos en la carpeta yourproject/app / libs. Deberías tener una opcional.json y una org.apache.http.legado.el archivo jar está ahí. Tal vez sea mejor ir al sitio web de apache y descargar la versión más reciente: http://hc.apache.org/downloads.cgi Descomprímelo donde quieras, ábrelo, ve a "lib", copia el httpclient-4.5.1.archivo jar y reemplazar la org.apache.http.legado.archivo jar con él.

Sincroniza y reconstruye/limpia tu proyecto y debería estar listo.

Por si acaso, abre tu terminal (L/H en la parte inferior de Android Studio) y escribe "gradlew clean". Instalará algunas cosas. Una vez hecho, escriba "gradlew assemble". Tomará unos minutos para terminar, pero le dará los errores si tiene alguno, por supuesto. Si no puede escribir nada en el Terminal, inicie el símbolo del sistema (botón de Windows + R), escriba cmd, presione Aceptar, 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 marque "Usar consola heredada". Reinicie A. Studio.

¡Buena suerte!

 1
Author: Immy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-19 07:25:55

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: Copiar y pegar el .archivo jar a la carpeta libs (crear si no existe ya) en su módulo (puede ser app o biblioteca)

Paso 3: Haga clic derecho en el frasco y "Agregar como biblioteca". Lo hará agrega automáticamente el archivo jar como una dependencia en el archivo gradle de tu módulo

Paso 4: Ahora automáticamente su problema se resolverá, pero en caso de que esté utilizando proguard en su aplicación, le dará una advertencia sobre los archivos de clase duplicados y no le permitirá construir. Es un error conocido y necesita agregar lo siguiente a su proguard-rules

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

¡Buena Suerte!

 1
Author: Debasish Mitra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-21 12:45:32

En mi caso, actualizé una de mis bibliotecas en mi proyecto 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 repositorio para que mi aplicación ya no funcione.

Tuve que incluir manualmente el commons-io añadiendo esto a gradle:

compile 'commons-io:commons-io:2.5'

Https://mvnrepository.com/artifact/commons-io/commons-io/2.5

 0
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-09 08:12:55

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

Luego lo importé a mi proyecto.

 0
Author: Likwidsage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-04 00:16:53