org - ¿Cómo agregar Apache HTTP API(heredado) como dependencia en tiempo de compilación para build.grade para Android M?
download android 6.0 marshmallow (10)
Acaba de copiar el archivo:
org.apache.http.legacy.jar
de la
Android/Sdk/platforms/android-23/optional
en la carpeta de proyecto
app/libs
.
Trabajó como encanto para 23.1.1.
Como se mencionó here , Android M no admitirá la API Apache HTTP. Los documentos indican que:
use la clase HttpURLConnection en su lugar.
o
Para continuar usando las API de Apache HTTP, primero debe declarar la siguiente dependencia en tiempo de compilación en su archivo build.gradle:
android {useLibrary ''org.apache.http.legacy''}
He convertido gran parte del uso de HttpClient de mi proyecto a HttpURLConnection, sin embargo, todavía necesito usar HttpClient en algunas áreas. Por lo tanto, estoy tratando de declarar ''org.apache.http.legacy'' como una dependencia en tiempo de compilación pero obtengo un error en build.gradle:
Método DSL Gradle no encontrado: ''useLibrary ()''
Mi pregunta es: ¿cómo declaro ''org.apache.http.legacy'' como una dependencia en tiempo de compilación en mi proyecto?
Cualquier ayuda es muy apreciada. Gracias
Como las respuestas son un poco viejas, pondré mi solución (lo que funcionó para mí), puede ser útil para otra persona ... Tomé mi solución de la documentación oficial de Apache, sin solución.
1 / en gradle:
dependencies {
...
// This is the maintained version from apache.
compile group: ''cz.msebera.android'', name: ''httpclient'', version: ''4.4.1.1''
}
2 / en el resto de la aplicación, reemplace
org.apache.http
por
cz.msebera.android.httpclient
y todas sus importaciones (dependencias) serán
cz.msebera.android.httpclient
.
solo puede hacer ctrl + shift + R y reemplazarlo en todo el proyecto.
En su archivo build.gradle, agregue
useLibrary ''org.apache.http.legacy''
según
Android 6.0 Changes
>
Apache HTTP Client Removal
notes.
android {
...
useLibrary ''org.apache.http.legacy''
...
}
Para evitar errores de enlace faltantes, agregue dependencias
dependencies {
provided ''org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2''
}
usando ''siempre que'' la dependencia no se incluirá en el apk
FWIW la eliminación de la biblioteca Apache fue anunciada hace un tiempo. Nuestro buen amigo Jesse Wilson nos dio una pista en 2011: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
Google dejó de trabajar en ApacheHTTPClient hace un tiempo, por lo que cualquier biblioteca que todavía dependa de eso debería incluirse en la lista de bibliotecas en desuso a menos que los encargados de la actualización actualicen su código.
<rant>
No puedo decirte cuántos argumentos técnicos he tenido con personas que insistieron en seguir con el cliente Apache HTTP.
Hay algunas aplicaciones importantes que se van a romper porque la administración de mis empleadores anteriores que no se nombrarán no escuchó a sus principales ingenieros o sabía de lo que estaban hablando cuando ignoraron la advertencia ... pero, agua debajo el puente.
Yo gano.
</rant>
Nota para Android 9 (Pie).
Además, para
useLibrary ''org.apache.http.legacy''
debe agregar en AndroidManifest.xml:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Fuente: https://developer.android.com/about/versions/pie/android-9.0-changes-28
Otra alternativa es simplemente agregar la dependencia de jbundle. Esto es más amigable con Android Studio ya que Android Studio no da el mensaje "no se puede resolver el símbolo ..."
dependencies {
compile ''org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2''
}
Para API 23:
Nivel superior build.gradle - /build.gradle
buildscript {
...
dependencies {
classpath ''com.android.tools.build:gradle:1.3.1''
}
}
...
Módulo específico build.gradle - /app/build.gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
useLibrary ''org.apache.http.legacy''
...
}
Documentos oficiales (para una vista previa): http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client
Último registro de cambios del complemento de Android Gradle: http://tools.android.com/tech-docs/new-build-system
Para resolver los problemas, asegúrese de estar utilizando la versión de herramientas de compilación "23.0.0 rc2" con las siguientes herramientas de dependencia gradle de compilación:
classpath ''com.android.tools.build:gradle:1.3.0-beta2''
Resolví este problema así:
1.) Establecer classpath en el archivo de compilación de nivel superior como se menciona en GUG:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath ''com.android.tools.build:gradle:1.3.0-beta2''
}
allprojects {
repositories {
jcenter()
}
}
}
2.) En el archivo de compilación del módulo específico:
android {
useLibrary ''org.apache.http.legacy''
compileSdkVersion ''android-MNC''
buildToolsVersion ''23.0.0 rc3''
}
debería ayudar:
android {
...
useLibrary ''org.apache.http.legacy''
...
}
Para evitar errores de enlace faltantes, agregue dependencias
dependencies {
provided ''org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2''
}
o
dependencies {
compileOnly ''org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2''
}
porque
Warning: Configuration ''provided'' is obsolete and has been replaced with ''compileOnly''.