Android Google Maps java.lang.NoClassDefFoundError: Resolución fallida de: Lorg / apache / http / ProtocolVersion


208

Estoy usando Google Maps Android SDK 11.6.2 (también probé 15.0.1), pero aparece el siguiente bloqueo antes de que se muestre el mapa. Ya se verificó la clave API en el manifiesto, está disponible, pero aún así ocurre este problema. Tengo una versión de targetSDk como 28.Es que causa este problema.

java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
        at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3)
        at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4)
        at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51)
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11)
        at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16)
        at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList[[zip file "/system/priv-app/PrebuiltGmsCorePi/app_chimera/m/MapsDynamite.apk"],nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi-v7a, /data/user_de/0/com.google.android.gms/app_chimera/m/00000036/MapsDynamite.apk!/lib/armeabi, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at ad.loadClass(:com.google.android.gms.dynamite_dynamiteloader@12848063@12.8.48 (100408-196123505):25)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at el.b(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):3) 
        at ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):4) 
        at em.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):51) 
        at com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):11) 
        at dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):16) 
        at dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848063@12.8.48 (100408-196123505):61) 

Ya tengo multiDexEnabled true en defaultConfig
Ramprasad

66
Este problema ocurre en Android P ... funciona bien en Android 5
Ramprasad

1
Conseguido esto también, que ocurre sólo en el Android beta 2. P
jamón

También recibí este error. Usando Android Studio y su emulador.
frankliuao

15
Los que ven este error en el nivel de API 28 (Android 9.0), los documentos de Google Maps ahora describen la entrada de manifiesto requerida .
Bob Snyder

Respuestas:


496

Ponga esto en la <application>etiqueta Manifiesto :

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

Más información: https://issuetracker.google.com/issues/79478779


9
Esto resolvió el problema. Sin embargo, no entiendo por qué se requiere esto. MapsActivity que utilicé parecía ser todo regular ..
frankliuao

8
Android 9.0 ya se lanzó y Google aún no ha reparado la biblioteca de mapas, ni documentado que requiera esta biblioteca. Muy mal soporte de desarrollo.
headsvk

41
@headsvk Google lo ha documentado, consulte: developers.google.com/maps/documentation/android-sdk/…
ham

Aún así, el soporte de cliente HTTP Apache se ha eliminado desde Android 6: https://developer.android.com/about/versions/marshmallow/android-6.0-changes#behavior-apache-http-client
wamfous

Esto también se solucionó java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/message/BasicNameValuePair;después de cambiar a AndroidX (y el aumento del límite de métodos de 65K subsiguiente)
Someone Somewhere

41

Esto resolverá tu bloqueo. Aplicar esto en manifiesto

 <application
             ...
             >
             ...
          <uses-library android:name="org.apache.http.legacy" 
           android:required="false"/>
             ...


<application/>

1
¿Para qué es android:usesCleartextTraffic="true"bueno? Otras respuestas no mencionan esta línea. ¿Tan opcional?
Timo Bähr

1
@ TimoBähr no es parte de la respuesta. La respuesta es lo que mencionó Ham, la respuesta de Nicky aclara que debes insertar esta línea dentro de las etiquetas de la aplicación.
batmaci

@ TimoBähr este android:usesCleartextTraffic="true"es el problema que recibirá más adelante, es por razones de seguridad.
Lester L.

@ Lester.L Si declaro que android:usesCleartextTraffic=”true”esto permite comunicarse con enlaces http de texto sin formato, eso es el status quo. Por lo que yo entiendo, solo android:usesCleartextTraffic=”false”haría que la aplicación sea más "segura". Por favor corrígeme si estoy equivocado.
Timo Bähr

1
Lo quité. No tiene nada que ver y responderse a sí mismo y posiblemente deba causar alguna violación de seguridad si alguien la copia y pega.
JerabekJakub

16

Realice una de las siguientes soluciones:

1- Actualiza la biblioteca de play-services-maps a la última versión:

com.google.android.gms:play-services-maps:16.1.0

2- O incluya la siguiente declaración dentro del <application>elemento de AndroidManifest.xml.

<uses-library
      android:name="org.apache.http.legacy"
      android:required="false" />

Ambas soluciones son compatibles con este documento de google: developers.google.com/maps/documentation/android-sdk/…
Andy

9

Si su aplicación está dirigida al nivel de API 28 (Android 9.0) o superior, debe incluir la siguiente declaración dentro del <application>elemento de AndroidManifest.xml.

 <uses-library
       android:name="org.apache.http.legacy"
  android:required="false" />


0

Si esto sucede en Android 8.0 o superior, simplemente ponga esta línea en su etiqueta de aplicación de manifiesto

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

0

Establecer tis:

multiDexEnabled true

Me gusta esto:

android {
    compileSdkVersion 28
    defaultConfig {

        multiDexEnabled true

    }
    buildTypes {
        release {

        }
    }
}

0

Agregar permisos en el archivo de manifiesto

`<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION."/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>`

y en parte pon esta línea de código

` <uses-library android:name="org.apache.http.legacy" android:required="false"/>`

Tuve el mismo problema y esto fue solucionado.


0

Aquí esta la solución

<uses-library android:name="org.apache.http.legacy" android:required="false" />

Agregar esta línea a su Menifest.xml dentro <application> etiqueta

para más información


0

crear 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 agregue 2 etiquetas en su AndroidManifest.xml

<?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>

Agregue también useLibrary 'org.apache.http.legacy' en su aplicación de construcción

defaultConfig {
        applicationId "com.ascorb"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 6
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        useLibrary 'org.apache.http.legacy'
    }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.