Android 9 Pie 崩溃 (com.google.android.gms...ClassNotFoundException)

Posted

技术标签:

【中文标题】Android 9 Pie 崩溃 (com.google.android.gms...ClassNotFoundException)【英文标题】:Android 9 Pie crash (com.google.android.gms... ClassNotFoundException) 【发布时间】:2019-09-02 09:01:33 【问题描述】:

我有一个在 android 上发布的 Unity3D 游戏,到目前为止运行良好。 但是,Android Vitals 仪表板现在报告了很多崩溃。以下是详细信息:

By Android version: Android 9   4500    100.0%

堆栈跟踪:

java.lang.Error: FATAL EXCEPTION [Thread-360]
Unity version     : 2017.3.1p3
Device model      : Google Pixel
Device fingerprint: google/sailfish/sailfish:9/PQ2A.190305.002/5240760:user/release-keys
Caused by
  at lt.b (com.google.android.gms.policy_ads_fdr_dynamite@30000@30000.238272502.238272502:2)
  at ls.a (com.google.android.gms.policy_ads_fdr_dynamite@30000@30000.238272502.238272502:1)
  at lu.a (com.google.android.gms.policy_ads_fdr_dynamite@30000@30000.238272502.238272502:18)
  at com.google.android.gms.ads.internal.util.ar.a (com.google.android.gms.policy_ads_fdr_dynamite@30000@30000.238272502.238272502:10)
  at kx.a (com.google.android.gms.policy_ads_fdr_dynamite@30000@30000.238272502.238272502:7)
  at kx.run (com.google.android.gms.policy_ads_fdr_dynamite@30000@30000.238272502.238272502:2)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at ac.loadClass (com.google.android.gms.dynamite_dynamiteloader@16089081@16.0.89 (100400-239467275):4)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)

我的AndroidResolverDependencies.xml 文件:

<dependencies>
  <packages>
    <package>com.android.support:customtabs:[26.0.0, 27.2.0[</package>
    <package>com.android.support:support-v4:[26.0.0, 27.2.0[</package>
    <package>com.google.android.gms:play-services-ads:17.2.0</package>
    <package>com.google.android.gms:play-services-analytics:11.8.0</package>
    <package>com.google.android.gms:play-services-base:[10.2.1, 12.1.0[</package>
    <package>com.google.android.gms:play-services-location:[10.2.1, 12.1.0[</package>
    <package>com.google.firebase:firebase-messaging:[10.2.1, 12.1.0[</package>
  </packages>
  <files>
    <file>Assets/Plugins/Android/android.arch.core.common-1.1.0.jar</file>
    <file>Assets/Plugins/Android/android.arch.core.runtime-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.arch.lifecycle.common-1.1.0.jar</file>
    <file>Assets/Plugins/Android/android.arch.lifecycle.livedata-core-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.arch.lifecycle.runtime-1.1.0.aar</file>
    <file>Assets/Plugins/Android/android.arch.lifecycle.viewmodel-1.1.0.aar</file>
    <file>Assets/Plugins/Android/com.android.support.customtabs-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.android.support.support-annotations-27.1.1.jar</file>
    <file>Assets/Plugins/Android/com.android.support.support-compat-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.android.support.support-core-ui-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.android.support.support-core-utils-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.android.support.support-fragment-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.android.support.support-media-compat-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.android.support.support-v4-27.1.1.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-ads-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-ads-base-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-ads-identifier-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-ads-lite-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-analytics-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-analytics-impl-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-base-16.1.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-basement-16.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-gass-17.2.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-location-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-measurement-base-16.3.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-measurement-sdk-api-16.3.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-places-placereport-16.0.0.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-stats-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-tagmanager-v4-impl-16.0.8.aar</file>
    <file>Assets/Plugins/Android/com.google.android.gms.play-services-tasks-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.auto.value.auto-value-annotations-1.6.jar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-common-16.1.0.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-17.1.2.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-iid-interop-16.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-measurement-connector-17.0.1.aar</file>
    <file>Assets/Plugins/Android/com.google.firebase.firebase-messaging-17.6.0.aar</file>
  </files>
</dependencies>
Target API level: 28
Minimum API level: 16

我在Google AdMob's discussion group 中看到了一个类似的帖子,建议将以下内容添加到AndroidManifest.xml 文件中:

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

但是:

    我不确定问题是由任何与 apache 相关的 API 引起的。 恐怕这会限制我的应用的安装次数,因为由于uses-library 声明,Google Play 中的较小受众可以使用它。

【问题讨论】:

同样的崩溃 我也遇到了同样的问题,你找到解决办法了吗? 你试过&lt;uses-library android:name="org.apache.http.legacy" android:required="false" /&gt; 吗? 嗨@SaadAnees。恐怕这会限制我的应用的安装次数,因为由于使用库声明,Google Play 中的较小受众可以使用它。 嗨@0xBFE1A8。这是我可以从 Google 的 ANR 和崩溃报告中检索到的完整崩溃信息。 【参考方案1】:

根据Behavior changes: apps targeting API level 28+

Apache HTTP 客户端弃用

在 Android 6.0 中,我们移除了对 Apache HTTP 客户端的支持。 从 Android 9 开始,该库已从 bootclasspath,默认情况下对应用程序不可用。要继续使用 Apache HTTP 客户端,面向 Android 9 及更高版本的应用可以将以下内容添加到其AndroidManifest.xml

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

注意: android:required="false" 属性对于以下应用程序是必需的 最低 SDK 为 23 或更低,因为在具有 API 级别的设备上 低于 24,org.apache.http.legacy 库不可用。 (在这些设备上,Apache HTTP 类在 引导类路径。)

作为使用运行时 Apache 库的替代方案,应用可以捆绑 他们自己的 APK 中的 org.apache.http 库版本。如果你 这样做,您必须重新打包库(使用 Jar Jar 之类的实用程序) 避免与提供的类的类兼容性问题 运行时。

【讨论】:

我刚刚提交了一个包含uses-library 元素的应用更新。我将监控崩溃报告并在此处发布结果。 刚刚检查了 ARN 和崩溃仪表板,提到的问题不再存在。 (Y) @EduardoCoelho glagot 工作。顺便说一句,你能帮我吗?我有同样的问题。我在 android manifest 中添加了这个,但它不起作用。 嗨@Saad。我所做的只是将该行添加到我的 App Manifest 的 &lt;application&gt; 元素中。帖子中提到的崩溃从报告中消失了。

以上是关于Android 9 Pie 崩溃 (com.google.android.gms...ClassNotFoundException)的主要内容,如果未能解决你的问题,请参考以下文章

Android Pie 9.0 将用户带到通知中心

Android Messenger 应用程序在登录后崩溃

移动: Android 9 “Pie”发布

Android(9)Pie中如何允许所有网络连接类型HTTP和HTTPS?

如何在 Android 9.0(PIE) 中获取 WIFI SSID?

Android Api(Okhttps)未在android 9(pie)及更高版本中调用[重复]