classnotfound 崩溃未出现在 crashlytics 中,但出现在 google play 控制台中
Posted
技术标签:
【中文标题】classnotfound 崩溃未出现在 crashlytics 中,但出现在 google play 控制台中【英文标题】:classnotfound crashes not showing up in crashlytics, but in google play console 【发布时间】:2018-08-27 06:37:21 【问题描述】:我们正在尝试调试发生在某些用户身上的崩溃,但无法确定它到底是什么。
在 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)并且它们都在那里。
我们怀疑它可能是其中一个活动在初始化期间使用的类,但其中一些是第 3 方 SDK,因此我们无法访问它们的源代码。
有没有办法查看找不到的类名?这些错误不会出现在 crashlytics 上,而且我们无法在我们拥有的任何设备/模拟器上重现它。
谢谢!
编辑:部分解决
问题最终是我们正在使用的通知包,它需要 AndroidManifest.xml 中的供应商特定条目(我们的测试设备中没有)。在重新集成了我们几乎所有的第 3 方服务后,我们最终看到崩溃报告消失了。
我们无法实现我们的总体目标(从记录到 Google Play 开发者控制台的异常中获取异常文本,而不仅仅是异常堆栈跟踪),因此没有“好的”方法(据我们所知) 找出缺少哪个类。 TBH 相当令人失望。
【问题讨论】:
您好,您能否指定出现此崩溃的 Android 操作系统版本?您是否在您的应用程序上运行了“lint”,以便它可以判断是否有任何运行时 api 调用在早期版本的 android 上不可用? 这发生在几乎所有的安卓版本上。我们无法运行 lint,因为 APK 是由 Adobe Air 生成的。 也许当您添加 Crashlytics 时它开始崩溃,因此 Crashlytics 是问题的根源 查看此 SO 帖子:***.com/questions/36881299/… 【参考方案1】:因此,并非所有用户都会遇到此异常。显然,在运行时,对于那些用户来说,加载器不知道这样的类。我的想法是您正在使用一个库(如 lib.so,您自己的本机代码或第 3 方库),其本机代码不支持某种架构(如 MIPS 或英特尔),因此此类设备会出现异常.只是要调查的东西。有针对不同架构的模拟器,因此您甚至可能不需要真正的硬件来测试这是否是根本原因。
【讨论】:
【参考方案2】:Crashlytics 不会立即更新。
一旦用户在崩溃后再次打开应用,该崩溃将在 Crashlytics 中报告。
可能的情况
-
崩溃后您的崩溃设备可能无法打开应用
崩溃后可能会被卸载
【讨论】:
【参考方案3】:在 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);
【讨论】:
以上是关于classnotfound 崩溃未出现在 crashlytics 中,但出现在 google play 控制台中的主要内容,如果未能解决你的问题,请参考以下文章
ClassNotFound:带有支持库 26.0.2 - 27.0.0 的 android.view.ViewStructure
在小部件中设置 Firebase 崩溃用户标识符的最佳方法是啥?
Android - 关于使用 jdbc 连接到 MSSQL 的 classnotfound
当 Google Play 控制台设备目录中未显示特定设备品牌/型号时,如何排除它?