protocolversion org google gms dynamite_mapsdynamite didn android google-maps gradle apache-httpcomponents android-9.0-pie

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.



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" />