classnotfound崩溃没有出现在崩溃分析中,但是在google play console

时间:2018-03-18 16:51:56

标签: android google-play-console

我们正在尝试调试某些用户发生的崩溃,但无法确切地知道它是什么。

在Google Play控制台中,我们看到了这一点:

java.lang.RuntimeException:  
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3331)
  at android.app.ActivityThread.-wrap20 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1734) 
  at android.os.Handler.dispatchMessage (Handler.java:102) 
  at android.os.Looper.loop (Looper.java:154)
  at android.app.ActivityThread.main (ActivityThread.java:6688)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1468)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:380)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3326)

我们在项目中设置了Crashlytics,这是应用程序开始运行时加载的第一件事。我怀疑清单中可能缺少其中一个类,但是我们对它进行了查看(甚至为了确保它而消除了APK)并且它们都在那里。

我们怀疑它可能是其中一个活动在初始化期间使用的类,但其中一些是第三方SDK,因此我们无权访问它们的来源。

有没有办法查看找不到的班级名称?错误不会出现在崩溃问题上,我们无法在我们拥有的任何设备/模拟器上重现错误。

谢谢!

编辑:部分解决方案

问题最终成为我们正在使用的通知包,它需要AndroidManifest.xml中特定于供应商的条目(我们的测试设备中没有这些条目)。在重新整合了几乎所有第三方服务后,我们最终看到崩溃报告消失了。

我们无法实现我们的总体目标(从记录到Google Play开发者控制台的例外中获取异常文本,而不仅仅是异常堆栈跟踪),因此没有"良好"方式(据我们所知)找出哪个类缺失。相当令人失望的TBH。

4 个答案:

答案 0 :(得分:1)

因此并非所有用户都会遇到此异常。显然,在运行时,对于那些用户来说,加载器不会知道这样的类。我的想法是你正在使用lib(如lib.so,你自己的本机代码或第三方lib),它的本机代码不支持某种架构(如MIPS或Intel),因此这些设备会获得异常。只是要调查一下。有不同体系结构的仿真器,因此您可能甚至不需要真正的硬件来测试这是否是根本原因。

答案 1 :(得分:0)

  • 问题是您使用的第三方图书馆中至少有一个有反思,而您在proguard-rules.pro中没有必要proguard-rules

  • 在某些情况下,这可能是MultiDex问题。在您的应用程序类中试试这个。这是在App.java中扩展了Application:



 @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this); // this is the key code
    }




答案 2 :(得分:0)

Crashlytics不会立即更新。

一旦用户在崩溃后再次打开应用程序,该崩溃将在Crashlytics中报告。

可能的情况

  1. 崩溃后设备可能无法在崩溃后打开应用
  2. 崩溃后可能会被卸载

答案 3 :(得分:0)

在build.gradle中尝试:

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

并在应用程序类中:

public class MyApplication extends Application {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}