android上的NoClassDefFoundError - 一个非常奇怪的情况?

时间:2011-11-07 01:56:36

标签: android classpath noclassdeffounderror

我面临的一个奇怪的情况是,该类肯定在我的Android应用程序的类路径上,但我一直得到NoClassDefFoundError异常。

我已通过此代码片段检查了该类确实存在:

try{
  Field dexField = PathClassLoader.class.getDeclaredField("mDexs");
  dexField.setAccessible(true);

  PathClassLoader classLoader =
   (PathClassLoader)Thread.currentThread().getContextClassLoader();
  Log.d("OUT", "Class loader" + classLoader.getClass().getName());

  DexFile[] dexs = (DexFile[]) dexField.get(classLoader);

  Log.d("OUT", "Enumerating");
  for (DexFile dex : dexs) {
    Enumeration<String> entries = dex.entries();
    while (entries.hasMoreElements()) {
     // (3) Each entry is a class name, like "foo.bar.MyClass"
     String entry = entries.nextElement();
     Log.d("OUT", "Entry: " + entry);
    }
  }
 }catch(Throwable e){
   Log.e("OUT", e.getMessage(), e);
 }
 // Here I reference to the problematic class

在设备上运行应用程序时,日志会打印类名,并在访问时抛出NoClassDefFoundError错误。

我迷失在这里。

有什么建议吗?我会非常感激的。感谢。

1 个答案:

答案 0 :(得分:4)

您需要了解,至少在规范Java中,“NoClassDefFoundError”并不意味着在类路径中找不到命名的.class文件。相反,在找到它之后,一些问题阻止了类的加载。

这有两个常见原因是命名问题(类路径结构中错误位置的类,相对于其内部声明的包名称,或者只是错误命名),或者加载执行验证所需的其他类的问题命名的类。有时问题是由于类的静态初始化程序中的异常。