android - google - java.lang.NoClassDefFoundError: resolución fallida de: Lorg/apache/http/ProtocolVersion
com google android gms dynamite_mapsdynamite (7)
Encontré ese error cuando uso Android studio 3.1 para construir una aplicación de Android P, se puede hacer la apk, pero cuando lo uso en el emulador de Android P, se bloqueará y arrojará información a continuación, más detalles vea la foto .
java.lang.NoClassDefFoundError: resolución fallida de: Lorg / apache / http / ProtocolVersion
parte de mi build.gradle en el módulo de la aplicación está abajo, ¿alguien cumple con esto? ¿Y le da alguna sugerencia? Muchas gracias.
android {
compileSdkVersion ''android-P''
buildToolsVersion ''28-rc1''
useLibrary ''org.apache.http.legacy''
//for Lambda
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
packagingOptions {
exclude ''META-INF/LICENSE''
exclude ''META-INF/NOTICE''
}
defaultConfig {
applicationId "xxx.xxx.xxx"
minSdkVersion 17
targetSdkVersion 27
versionCode xxxx
versionName "Vx.x.x"
multiDexEnabled true
//other setting required
ndk {
abiFilters ''armeabi'', ''armeabi-v7a'', ''armeabi-v8a'', ''x86'', ''x86_64'', ''mips'', ''mips64''
}
De acuerdo con esta respuesta SO , se produce debido a un error del SDK de AWS que parece solucionarse en la versión 2.6.30 del SDK , por lo que actualizar la versión a una más nueva puede ayudarlo a solucionar el problema.
Este enlace android-9.0-changes-28 -> Desactivación del cliente HTTP Apache explica la razón para agregar lo siguiente a su AndroidManifest.xml:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Con Android 6.0, eliminamos el soporte para el cliente HTTP Apache. A partir de Android 9, esa biblioteca se elimina de la ruta de inicio y no está disponible para las aplicaciones de forma predeterminada.
Para ejecutar org.apache.http.legacy perfectamente en Android 9.0 Pie, cree un archivo xml
res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
Y agrega 2 etiquetas a tu AndroidManifest.xml
android: networkSecurityConfig = "@ xml / network_security_config" android: name = "org.apache.http.legacy"
<?xml version="1.0" encoding="utf-8"?>
<manifest......>
<application android:networkSecurityConfig="@xml/network_security_config">
<activity..../>
......
......
<uses-library
android:name="org.apache.http.legacy"
android:required="false"/>
</application>
También agregue
useLibrary ''org.apache.http.legacy''
en su aplicación, compile gradle
android {
compileSdkVersion 28
defaultConfig {
applicationId "your application id"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
useLibrary ''org.apache.http.legacy''
}
Realice cualquiera de las siguientes acciones:
1- Actualice la biblioteca de mapas de play-services a la última versión:
com.google.android.gms:play-services-maps:16.1.0
2- O incluya la siguiente declaración dentro del elemento
<application>
de
AndroidManifest.xml
.
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
Si está utilizando com.google.android.gms: play-services-maps: 16.0.0 o inferior y su aplicación tiene como objetivo el nivel de API 28 (Android 9.0) o superior, debe incluir la siguiente declaración dentro del elemento de AndroidManifest. xml.
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
Esto se maneja si está utilizando com.google.android.gms: play-services-maps: 16.1.0 y no es necesario si su aplicación está dirigida a un nivel de API más bajo.
También se informa en el rastreador de errores de Android: https://issuetracker.google.com/issues/79478779
Actualización: esto ya no es un error o una solución alternativa, es necesario si su aplicación apunta al nivel 28 de API (Android 9.0) o superior y utiliza el SDK de Google Maps para Android 16.0.0 o inferior (o si su aplicación usa el HTTP Apache Biblioteca heredada). Ahora está incluido en los documentos oficiales . El tema público ha sido closed como comportamiento previsto.
Este es un
bug
en el lado de Google Play Services, hasta que se solucione, debería poder solucionarlo agregando esto a su
AndroidManifest.xml
dentro de la etiqueta
<application>
:
<uses-library android:name="org.apache.http.legacy" android:required="false" />