java.lang.NoClassDefFoundError:[generic] at dalvik.system.NativeStart.main(Native Method)

dar*_*aos 8 java android noclassdeffounderror dalvik

我的应用程序的一些用户得到了这个例外

java.lang.NoClassDefFoundError: [generic] 
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

这不是常见的例外,因为有大量用户,只有部分用户有此异常.我不使用任何本机库,所有外​​部库都不使用任何本机代码

它发生的Android版本:

  1. Android 4.0.3 - 4.0.4 (97.7%)
  2. Android 4.0 - 4.0.2 (1.5%)
  3. Android 4.1 (0.8%)

任何人都可以帮我解决问题吗?AndroidManifest中的接收器可以调用此问题吗?

fad*_*den 7

NoClassDefFoundError[generic]标签由VM,抛出从一个"预制"对象.该异常没有有用的堆栈跟踪,但通常不会单独出现.

背景:类加载器机制需要在加载器中找不到类时抛出异常.加载器必须遵循其父加载器,因此如果您尝试加载应用程序类,它将首先询问引导加载程序,它将失败并抛出异常.然后,app loader会自己进行查找,这可能会成功.

这意味着VM正在分配异常,初始化对象,并填充堆栈跟踪...然后将其丢弃,以用于未从引导类加载器中出来的每个类.

为了避免无意义的分配,引导加载程序(在VM内部实现)抛出一个通用的预分配异常对象.由于在VM启动时对象已完全形成,因此它没有有意义的堆栈跟踪信息.

在实践中,您没有看到这些,因为应用程序通常不直接从引导加载程序加载类.应用程序或系统加载程序为您创建一个有意义的例外.即使您直接从引导加载程序请求类,您也应该只将其视为a的"原因" ClassNotFoundException.

DexClassLoader被写入到使用错误代码,而不是异常的当一个类无法找到,所以你不会看到在所有通过该路径.

如果它NoClassDefFoundError是更大异常的"原因",则需要获取最外层异常,因为它将具有有意义的堆栈跟踪.如果您看到它们自己出现,那么一些非常奇怪的事情正在进行 - 很可能一些代码试图直接加载类并且传递null而不是类加载器对象(这是您引用引导加载程序的方式).