2017-05-31 122 views
6

此崩溃发生在我们的应用程序的1800名用户,每月有1.2个活跃用户(根据Google Developer Console)。 相当罕见,但它发生。BaseDexClassLoader发生意外崩溃

Android 4.1多达6个,但没有Android 7的报告。

BaseDexClassLoader中此ClassNotFoundException的性质可能是什么。 我们可以避免它吗?

了java.lang.RuntimeException: 在android.app.LoadedApk.makeApplication(LoadedApk.java:572)在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4831) 在android.app。 ActivityThread.access $ 1500(ActivityThread.java:178)
在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1531)
在android.os.Handler.dispatchMessage(Handler.java:111)在 android.os.Looper.loop(Looper.java:194)at 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) 在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)at android.app.Instrumentation.newApplication(Instrumentation.java:985 )
at android.app.LoadedApk.makeApplication(Loaded Apk.java:567)

+1

https://stackoverflow.com/questions/15686593/java-lang-classnotfoundexception-in-dalvik-system-basedexclassloader-findclass –

+1

发表您的gradle这个文件,如果可能的话 –

+1

你的清单有其监听连接更改还是可以由系统自动启动的连接更改? – MatPag

回答

6

注:下面的答案可能是不准确的,无法验证, 因为这样的例外是相当impossibile在测试 环境模拟。如果有人有关于该主题的更多信息或者可能是最终解决方案,请在此处发布。 我提前道歉,如果这个信息将被证明是假的,在所有的,但它们都是基于我的

有在Android中java.lang.ClassNotFoundException的多个变体,其中大部分是由引起的事经验和体会一个错误的Proguard配置,IDE不能正确关闭在构建时间等设备的上一个启动的实例...

所有这个“正常”ClassNotFoundException s是可区分的,因为在某些例外的部分有一些与应用本身就像:

java.lang.RuntimeException: Unable to instantiate application com.my.package.CustomApplication: java.lang.NullPointerException 

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)。

什么,我认为它的发生在这里:

  1. 安装该应用程序
  2. 系统要启动组件之一(例如<receiver>
  3. 的应用被卸载,因为的新更新(此步骤应该只持续几秒钟)
  4. 系统无法找到您的应用并抛出您发布的错误
  5. 更新安装和您的应用程序重新开始

工作的因素,这样的组合可以解释为什么你只有“少数”考虑总活跃用户崩溃。

你能做些什么呢?我认为没有什么,因为这是系统处理这种特殊情况的一个错误。 This comment中的多个相关问题之一具有相同的结论。

您可以尝试创建自定义ClassLoader,您可以在其中自行处理异常,并在不使应用程序崩溃的情况下终止应用程序进程,这样用户不应该注意任何事情(我不知道用户是否是真的注意到这一点,也许这是一个由系统处理的内部异常,并且用户没有看到任何东西)

事实上,你没有遇到Android 7的报告可能是一个迹象,他们解决了最新的问题Android版LoadedApk

PS:我真的不认为这与多重分解有关,但是您可以执行一些测试t Ø一定

+1

哇,只是哇。谢谢你这篇精彩的文章。 这一切都有道理。 我接受了答案。 – Pavel

+0

似乎合理。 – adarsh

+0

虽然有些事情没有解释 - 如果解释是正确的,我们早些时候会看到更多的这些错误,并且很多google-play-apps都会受到影响。之前在stackoverflow中缺少这个问题,以及最近我也开始看到这个问题的事实仍然没有解释。 – adarsh