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

标签 android classpath noclassdeffounderror

我面临着一个奇怪的情况,该类肯定位于我的 Android 应用程序的类路径上,但我不断收到 NoClassDefFoundError 异常。

我已经通过以下代码 fragment 检查了该类确实存在:

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 错误。

我在这里迷路了。

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

最佳答案

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

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

关于android - Android 上的 NoClassDefFoundError - 一个非常奇怪的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8032010/

相关文章:

java - 在java中解码SVG图像文件(编码为base64)

android - 仅使用具有与特定键列表匹配的键的项目填充 Firebase RecyclerView?

JavaFX getResource 在浏览器中运行时返回 null

java - 为什么我的应用程序 (.jar) 出现错误 java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError : Could not initialize class play. 数据.format.Formatters

java - NoClassDefFoundError:注释处理期间的 org/junit/AfterClass

Android 简单的微调器项目

android - 我的 fragment 没有附加到主 Activity 类。

java - ANT 抛出异常

java - ClassPathResource 没有得到类路径