¿Cómo puedo importar correctamente HttpClient de org.apache en Android usando el archivo de compilación gradle?
Estoy viendo este error cuando intento ejecutar "gradle build"
WARNING: Dependency org.apache.httpcomponents:httpclient:4.2.3 is ignored for the default configuration as it may be conflicting with the internal version provided by Android. In case of problem, please repackage with jarjar to change the class packages :prepareFreeDebugDependencies :compileFreeDebugAidl UP-TO-DATE :generateFreeDebugBuildConfig UP-TO-DATE :mergeFreeDebugAssets UP-TO-DATE :compileFreeDebugRenderscript UP-TO-DATE :mergeFreeDebugResources UP-TO-DATE :processFreeDebugManifest UP-TO-DATE :processFreeDebugResources UP-TO-DATE :compileFreeDebug /home/xrdawson/Projects/Foo/Bar/src/main/java/com/Foo/app/PixActivity.java:20: error: package org.apache.http.entity.mime does not exist import org.apache.http.entity.mime.HttpMultipartMode; ^
El final de mi build.gradle se parece a esto:
- Gradle: Android Studio hereda buildtype
- Gradle no se sincronizó con 'No se pudo encontrar una biblioteca opcional'
- ¿Cómo desinstalar completamente el SDK de tejido de Twitter del proyecto android?
- Android Studio proguardRelease FALLO debido biblioteca de frasco de salida vacío
- No puede instalar el repositorio y el proyecto de sincronización - no puede utilizar las bibliotecas de soporte 25.2.0
repositories { mavenCentral() } dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile "org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.3" compile "com.madgag:markdownj-core:0.4.1" // compile "org.apache.httpcomponents:com.springsource.org.apache.httpcomponents.httpclient:4.2.1" compile 'org.apache.httpcomponents:httpclient:4.2.3' compile "com.google.android:support-v4:r6" } }
¿Por qué el proceso de compilación ignora HttpClient, pero luego no se compila?
- Roboblender-3.0.1.jar: no incluido en Android: javax.tools. Referido desde com.google.inject.blender.AnnotationDatabaseGenerator
- Android Studio + Artifactory
- Error de proyecto de Android Studio Library
- Aplicación para Android que comienza lentamente - dex2oat El código postal está ausente. Cancelado - Gradle 2.10
- La importación de mi biblioteca de Android en una aplicación no se reconoce como una biblioteca
- No se puede resolver el símbolo 'tools' y 'GradleException'
- Dependencias de Gradle: compilar el proyecto por ruta relativa
- ¿Gradle escala de rendimiento bien con el número de núcleos de la CPU
Creo que la biblioteca httpclient no incluye las partes mímicas, las que están en httpmime. Esta es una dependencia transitiva de httpclient, pero como se ignora, no se tendrá en cuenta.
Prueba a agregar esta dependencia:
compile "org.apache.httpcomponents:httpmime:4.2.3"
La adición de http-mime
como una dependencia hace que httpclient
sea incluido como una dependencia transitiva, lo cual, para mí, resultó en las mismas advertencias que el OP. Tuve que decir gradle para ignorar la dependencia transitiva:
compile ('org.apache.httpcomponents:httpmime:4.3.5') { // avoid "is ignored for the default configuration X" warnings // since httpclient is included in the android SDK. exclude group: 'org.apache.httpcomponents', module: 'httpclient' }
Para Android, ahora está disponible HttpClient 4.3.X reempaquetado Maven distribución
Reposición del proyecto: https://github.com/smarek/httpclient-android
Maven tag: cz.msebera.android:httpclient:4.3.+
Publicado en el repositorio de Maven Central
Que en la versión 4.3.3 incluye HttpCore, HttpClient, HttpClient-Cache y HttpMime (todos de la misma versión)
Descargo de responsabilidad: Soy autor de dicho proyecto
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'
Else si su compileSdkVersion es 23 entonces 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' } }
Debido a que las API oficiales de Android incluyen httpclient, eliminamos toda la dependencia de httpclient, incluida su dependencia transitiva.
Si realmente quieres usar httpclient, lo volvería a empaquetar con jarjar, cambiar el nombre de los paquetes y usarlo en su lugar.
En cuanto a httpmime, parece que no está en android.jar, así que podríamos evitar filtrarlo, pero por ahora tendrías que agregarlo manualmente.
Probablemente queremos ajustar esto antes de que el sistema de compilación vaya 1.0
- Convertir cadena a JSON array
- CheckBox en RecyclerView mantiene la comprobación de diferentes elementos