【问题标题】:App crashes when running maps activity运行地图活动时应用程序崩溃
【发布时间】:2018-11-26 13:36:23
【问题描述】:

我的项目地图活动不起作用
我刚刚将 api 密钥粘贴到位 google_maps_api.xml 并点击运行

Logcat:

E/AndroidRuntime: 致命异常: Thread-5 进程:com.example.appmy.lofind,PID:10901 java.lang.NoClassDefFoundError:解析失败:Lorg/apache/http/ProtocolVersion; 在 el.b(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):3) 在 ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):4) 在 em.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):51) 在 com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):11) 在 dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):16) 在 dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):61) 引起:java.lang.ClassNotFoundException:在路径上找不到类“org.apache.http.ProtocolVersion”:DexPathList [[zip file“/system/priv-app/PrebuiltGmsCore/app_chimera/m/MapsDynamite.apk”] ,nativeLibraryDirectories=[/data/user_de/0/com.google.android.gms/app_chimera/m/00000006/MapsDynamite.apk!/lib/x86, /system/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:126) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:379) 在 ad.loadClass(:com.google.android.gms.dynamite_dynamiteloader@12848026@12.8.48 (040700-196123505):25) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 el.b(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):3) 在 ek.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):4) 在 em.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):51) 在 com.google.maps.api.android.lib6.drd.ap.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):11) 在 dw.a(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):16) 在 dw.run(:com.google.android.gms.dynamite_mapsdynamite@12848026@12.8.48 (040700-196123505):61) E/SchedPolicy:set_timerslack_ns 写入失败:不允许操作

【问题讨论】:

    标签: android performance kotlin


    【解决方案1】:

    使用目标 SDK 28 时出现同样的问题。恢复到 SDK 27 解决了该问题。


    不要还原您的目标 SDK。

    最好使用这个解决方案https://stackoverflow.com/a/50944537/5710605

    【讨论】:

    • @MajdNaji 检查爱德华的其他答案。我认为这比降级更好。
    • 恢复到 SDK 27 不是解决方案,不要在你的房子里添加破碎的窗户。 《务实的程序员》
    【解决方案2】:

    我在以下位置找到了另一个解决方案 Android Google maps java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion

    只需将其添加到您的清单中:

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

    更新:

    从 Google Maps SDK 版本 16.1.0 开始,您可以跳过添加上述解决方案,因为标签已添加到地图库的 AndroidManifest 中。

    https://developers.google.com/maps/documentation/android-sdk/releases#2019-02-06

    在 AndroidManifest.xml 中添加了以下声明以支持 Android P 及更高版本上的 Apache HTTP 客户端。更新到之后 com.google.android.gms:play-services-maps:16.1.0 你可以删除这个 来自您自己的 AndroidManifest.xml 的行。 (问题117591497

    &lt;uses-library android:name="org.apache.http.legacy" android:required="false"/&gt;

    【讨论】:

    • 谢谢。我更喜欢这个接受的答案。我在 SO 上的其他地方阅读了包含&lt;uses-library android:name="com.google.android.maps" /&gt; 的内容。在我的情况下它不起作用,但有什么想法吗?
    【解决方案3】:

    把这个放在Manifest标签里:

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

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

    正如谷歌文档所说:

    如果您使用的是 com.google.android.gms:play-services-maps:16.0.0 或 低于且您的应用针对 API 级别 28 (Android 9.0) 或更高版本, 您必须在 AndroidManifest.xml 的元素。

    【讨论】:

    • 为什么要添加 Eduard Bosch 已经给出的答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多