Android谷歌地图java.lang.NoClassDefFoundError:失败的解决方案:Lorg/apache/http/ProtocolVersion

Ram*_*sad 188 android google-maps google-play-services

我正在使用谷歌地图Android SDK 11.6.2(也试过15.0.1),但我在地图显示之前遇到了崩溃.已经检查过清单中的API密钥,它可用,但仍会出现此问题.我有targetSDk版本为28.这是导致此问题.

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) 
Run Code Online (Sandbox Code Playgroud)

ham*_*ham 439

把它放在Manifest <application>标签中:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Run Code Online (Sandbox Code Playgroud)

更多信息:https: //issuetracker.google.com/issues/79478779

  • @headsvk Google已将其记录在案,请参阅:https://developers.google.com/maps/documentation/android-sdk/config#specify_requirement_for_apache_http_legacy_library (39认同)
  • Android 9.0已经发布,谷歌仍然没有修复地图库,也没有记录它需要这个库.非常差的开发支持. (8认同)
  • 这解决了这个问题.但是,不太明白为什么这是必需的.我使用的MapsActivity似乎都是常规.. (4认同)

Nic*_*cky 36

这将解决您的崩溃.在清单中应用此项

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


<application/>
Run Code Online (Sandbox Code Playgroud)


Dar*_*ush 15

请执行以下解决方案之一:

1-将play-services-maps库更新为最新版本:

com.google.android.gms:play-services-maps:16.1.0
Run Code Online (Sandbox Code Playgroud)

2-或在的<application>元素中包含以下声明AndroidManifest.xml

<uses-library
      android:name="org.apache.http.legacy"
      android:required="false" />
Run Code Online (Sandbox Code Playgroud)


Sum*_*man 7

如果您的应用定位到API级别28(Android 9.0)或更高版本,则必须在<application>AndroidManifest.xml 的元素中包含以下声明。

 <uses-library
       android:name="org.apache.http.legacy"
  android:required="false" />
Run Code Online (Sandbox Code Playgroud)


cre*_*der 5

如果您的应用面向 API 级别 28 (Android 9.0) 或更高版本,则必须在 AndroidManifest.xml 的元素中包含以下声明。在下面的链接中查看面向 28 岁以上的应用程序的行为变化

https://developer.android.com/about/versions/pie/android-9.0-changes-28 https://developer.android.com/about/versions/pie/android-9.0-changes-28