这个崩溃发生在我们的应用程序的1800个用户中,每月有1.2个活跃用户(根据Google Developer Console) . 相当罕见,但它发生了 .
Android 4.1高达6,但在报告中没有Android 7 .
BaseDexClassLoader中此ClassNotFoundException的本质可能是什么 . 我们能避免吗?
java.lang.RuntimeException:在Android.app.A.运行时,Android.app.A活动时,我在Android.app.ActivityThread.acle上运行android.app.Ao.T.Terread.access: :178)在Android.app.Loper.loop(Looper.java:194)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1531)android.os.Handler.dispatchMessage(Handler.java:111)在android.app.ActivityThread.main(ActivityThread.java:5637)的java.lang.reflect.Method.invoke(Method.java:0)java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:959)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)引起:java.lang.ClassNotFoundException:at dalvik位于android.app.Instrumentation的java.lang.ClassLoader.loadClass(ClassLoader.java:469)的java.lang.ClassLoader.loadClass(ClassLoader.java:511)中的.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) . newApplication(研究所rumentation.java:985)在android.app.LoadedApk.makeApplication(LoadedApk.java:567)
1 回答
Android中有
java.lang.ClassNotFoundException
的多种变体,其中大多数是由错误的Proguard配置引起的,IDE在构建期间没有正确关闭先前启动的设备实例等...所有这些都是可以区分的,因为在异常的某些部分中存在与应用程序本身相关的内容,例如:
要么
虽然您面对的是与您的应用程序完全无关的东西,但很明显没有对您的应用程序组件的引用 . 当您的应用程序因更新而被卸载并重新安装时,系统如何加载APK并尝试执行某些代码(如Receiver)是一个错误 .
我认为这里发生的是:
这些因素的组合可以解释为什么考虑到活跃用户总数,您只有“少数”崩溃 .
你能做些什么呢?我觉得什么都没有,因为这是系统如何处理这种特殊情况的错误 . This comment在多个相关问题之一中得出了相同的结论 .
您可以尝试创建自定义
ClassLoader
,您可以自己处理异常并在不崩溃应用程序的情况下以静默方式终止应用程序进程,这样您的用户就不应该知道用户是否真的注意到了这一点,也许它什么都没有看到_1493887 )您没有遇到针对Android 7的报告的事实可能表明他们已经在最新的Android版本的LoadedApk类中解决了这个问题
PS:真诚地我认为这与多索引无关,但您可以执行一些测试以确定