Pav*_*vel 8 crash android classnotfoundexception
这个崩溃发生在我们的应用程序的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.access.access $ 1500(ActivityThread.java)的android.app.LoadedApk.makeApplication(LoadedApk.java:572). 178)
在android.app.Hoper.loop
(Looper.java:194)的android.app.Handler.dispatchMessage(Handler.java:111)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1531)android.app.ActivityThread.main(ActivityThread.java:5637)at java.lang.reflect.Method.invoke(Method.java:0)at 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:在dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)at java.lang.ClassLoader.loadClass(ClassLoader.java:511)at java.lang.ClassLoader.loadClass(ClassLoader. java:469)在android.app.Instrumentation.newApplication(Instrumentation.java:985)
android.app.LoadedApk.makeApplication(LoadedApk.java:567)
Mat*_*Pag 19
注意:下面的答案可能不准确且无法验证,因为此异常在测试环境中进行模拟是非常不可能的.如果有人对该主题有更多信息或者可能是最终解决方案,请在此处发布.如果这些信息被证明是假的,我会提前道歉,但这些信息是基于我的经验和对事物的理解
java.lang.ClassNotFoundExceptionAndroid中有多种变体,其中大多数都是由错误的Proguard配置引起的,IDE在构建时没有正确关闭先前启动的设备实例等...
所有这些"正常" ClassNotFoundException都是可区分的,因为在异常的某些部分中存在与应用程序本身相关的内容,例如:
java.lang.RuntimeException: Unable to instantiate application com.my.package.CustomApplication: java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
要么
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]]
Run Code Online (Sandbox Code Playgroud)
虽然您面对的是与您的应用程序完全无关的东西,但很明显没有对您的应用程序组件的引用.当您的应用程序因更新而被卸载并重新安装时,系统如何加载APK并尝试执行某些代码(如Receiver)是一个错误.
我认为这里发生的是:
- 该应用已安装
- 系统想要启动您的一个组件(例如a
<receiver>)- 由于新的更新,该应用程序已卸载(此步骤应仅持续几秒钟)
- 系统无法再找到您的应用并抛出您发布的错误
- 安装了更新,您的应用程序再次开始工作
这些因素的组合可以解释为什么考虑到活跃用户总数,您只有"少数"崩溃.
你能做些什么呢?我觉得什么都没有,因为这是系统如何处理这种特殊情况的错误.在多个相关问题之一中的这个评论具有相同的结论.
您可以尝试创建一个自定义ClassLoader,您可以自己处理异常并在不崩溃应用程序的情况下静默终止应用程序进程,这样您的用户就不会注意到任何事情(我不知道用户是否真的注意到了这一点,也许这是系统处理的内部异常,用户什么都看不到)
您没有遇到Android 7报告的事实可能表明他们在最新的Android版LoadedApk类中修复了问题
PS:真诚地我认为这与多索引无关,但您可以执行一些测试以确定
| 归档时间: |
|
| 查看次数: |
2646 次 |
| 最近记录: |