【问题标题】:java.lang.ClassNotFoundException occurring only in updated Samsung Devices with Android 9.0java.lang.ClassNotFoundException 仅发生在具有 Android 9.0 的更新三星设备中
【发布时间】:2019-08-09 15:58:30
【问题描述】:

因此,显然,每当用户尝试在具有最新 9.0 更新的三星 Galaxy 设备上打开该应用程序时,该应用程序就会崩溃。我已经在装有 android 9.0 的设备上测试了该应用程序,它似乎在我测试过的几乎所有设备上都能正常工作。我猜这是三星唯一的问题?

这是来自 Play 管理中心的堆栈跟踪:

  java.lang.NoClassDefFoundError: 
  at androidx.fragment.app.FragmentManager.b (FragmentManager.java:3)
  at androidx.fragment.app.FragmentHostCallback.a (FragmentHostCallback.java:3)
  at androidx.fragment.app.FragmentManagerImpl.a (FragmentManagerImpl.java:19)
  at com.google.android.gms.ads.internal.util.ar.a (ar.java:15)
  at androidx.core.widget.AutoSizeableTextView.a (AutoSizeableTextView.java:20)
  at androidx.core.widget.AutoSizeableTextView.run (AutoSizeableTextView.java:8)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at androidx.appcompat.view.StandaloneActionMode.loadClass (StandaloneActionMode.java:4)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at androidx.fragment.app.FragmentManager.b (FragmentManager.java:3)
  at androidx.fragment.app.FragmentHostCallback.a (FragmentHostCallback.java:3)
  at androidx.fragment.app.FragmentManagerImpl.a (FragmentManagerImpl.java:19)
  at com.google.android.gms.ads.internal.util.ar.a (ar.java:15)
  at androidx.core.widget.AutoSizeableTextView.a (AutoSizeableTextView.java:20)
  at androidx.core.widget.AutoSizeableTextView.run (AutoSizeableTextView.java:8)

堆栈跟踪是我的游戏控制台中的所有内容,以及它发生的设备的信息。我特别担心这个错误,因为更多的人将升级到三星最新的 One UI。 Here's screenshot from Play Console showing devices with errors

据我说是找不到某个类? AutoSizeableTextView 也许?我在应用程序中使用 androidx 库以及 MaterialComponents 主题。

【问题讨论】:

  • 在发布堆栈跟踪之前,您应该对其进行去混淆处理(方法名称、行号),否则它的用途有限。
  • 是的,正如您在屏幕截图中看到的那样,我已经上传了反混淆文件。这是谷歌的依赖,所以也许他们已经混淆了它?甚至我也无法知道问题出在哪里。另外,如果有任何方法可以对文件进行去混淆,那会很棒吗?我没有三星设备来实际查看真正的堆栈跟踪,我一直在努力寻找。它适用于所有搭载 Android 9.0 的设备,但更新后的 Samsung One UI 设备除外。
  • 您的问题是堆栈跟踪缺少包含无法加载类的信息的消息。此外,行号无效(我假设您已将 Proguard 配置为删除它们)。由于我们既没有带有类名的消息也没有行号,因此几乎不可能理解出了什么问题。看起来您需要一部实体三星手机或远程“设备场”中的一部(远程 Android 设备作为调试服务)。
  • 你的应用中有map sdk吗?
  • 不,我的应用程序中没有地图 SDK。 @Robert 我可以看到谷歌的 ANR 和崩溃中的其他错误,行号和所有内容都没有问题。只有这就是以这种方式出现的错误。

标签: java android androidx samsung-galaxy


【解决方案1】:

也许 ProGuard 规则太过分了? 请检查 AutoSizeableTextView 依赖项有(在您的情况下为旧版)android.support.*。这可能是个问题。或者,不推荐(也不是解决方案),您可以检查您的应用在运行时是否缺少依赖项

private boolean hasMissingClassFoo() {

    try {
        Class.forName("com.your.domain.myClassFoo");
    } catch (ClassNotFoundException x) {
        x.printStackTrace();
        return true;
    }
    return false;
}

【讨论】:

  • 但是我如何实际检查它是否解决了问题?我目前没有任何三星设备,我一直在努力寻找一款。有什么办法可以在模拟器或其他物理设备上模拟这个?同样在堆栈跟踪中,它显示了 androidx 依赖项,因此在这种情况下 AutoSizeableTextView 不是遗留的。此问题仅与三星设备特别相关。我已经在 Android 9.0 设备上对其进行了测试,运行良好。混淆不是问题,如果是问题,那么它就不会完全起作用。
  • 您可以使用 firebase + crashlytics 跟踪事件、异常
  • 是的,但我已经在使用 Google Play 崩溃分析这样做了,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多