注意:下面的答案可能不准确且无法验证,
因为这个异常在测试中几乎不可能模拟
环境。如果有人有关于该主题的更多信息或者可能
最终解决方案请将其发布在这里。
如果这些信息被证明是错误的,我提前道歉,但它们是基于我的经验和对此事的理解
有多种变体java.lang.ClassNotFoundException
在 Android 中,大多数是由错误的 Proguard 配置、IDE 在构建期间未正确关闭设备先前启动的实例等引起的......
这一切都是“正常”的ClassNotFoundException
是可以区分的,因为在异常的某些部分有一些与应用程序本身相关的内容,例如:
java.lang.RuntimeException: Unable to instantiate application com.my.package.CustomApplication: java.lang.NullPointerException
or
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.package/com.my.package.MyClass}: java.lang.ClassNotFoundException: Didn't find class "com.my.package.MyClass" on path: DexPathList[[zip file "/data/app/com.my.package-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.my.package-1, /vendor/lib, /system/lib]]
虽然您面临的问题与您的应用程序完全无关,因为很明显没有引用您的应用程序组件。这是当您的应用因更新而卸载并重新安装时,系统加载 APK 并尝试执行某些代码(如接收器)的错误。
我认为这里发生的是:
- 该应用程序已安装
- 系统想要启动您的某个组件(例如
<receiver>
)
- 由于新的更新,该应用程序被卸载(此步骤应该只持续几秒钟)
- 系统无法再找到您的应用程序并抛出您发布的错误
- 更新已安装,您的应用程序再次开始运行
这些因素的结合可以解释为什么考虑到活跃用户总数,您只有“很少”的崩溃。
对此你能做什么?我认为没什么,因为这是系统处理这种特殊情况的错误。这条评论在多个相关问题之一具有相同的结论。
您可以尝试创建一个自定义ClassLoader
您可以自己处理异常并默默地终止应用程序进程而不会使应用程序崩溃,这样您的用户不应该注意到任何事情(我不知道用户是否真的注意到这一点,也许这是由系统和用户什么也看不到)
您没有遇到 Android 7 的报告这一事实可能表明他们在最新的 Android 版本中修复了该问题加载的Apk class
PS:真诚地,我认为这与多重索引无关,但您可以执行一些测试来确定