当前位置: 首页 > 面试题库 >

在运行时出现NoClassDefFoundError,但类在classes.dex中,是什么?

姜飞飙
2023-03-14
问题内容

我已经包含了从Eclipse Android项目构建的JAR文件,并且在我的Android Studio项目中引用了它,如下所示:

  compile files('libs/libraryproject.jar')

这有效,并且我能够自动完成代码引用。当我编译APK时,一切都很好。我安装并运行,然后收到no class def错误:

 java.lang.NoClassDefFoundError: com.android.canvas.CanvasContainer
            at com.app.MainActivity.onCreate(MainActivity.java:22)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

但是,当我解压缩APK并使用dexdump查看classes.dex文件时,我看到上面的类存在。

为什么然后在运行时出现此类未找到错误?

更新

感谢克里斯的建议,我注意到在日志的前面,我的CanvasContainer类由于无法解析而无法链接 interface 1990 'Lorg/cocos2dx/lib/Cocos2dxHelper$Cocos2dxHelperListener;'。显然,我的Cocos库代码似乎没有作为JAR的一部分导出。


问题答案:

通常,在安装,dex优化或类似的准备过程中,将删除具有运行时无法满足的依赖关系的类。

如果您卸载了该应用程序,请启动一些收集所有logcat的内容,然后再次安装它,通过搜索结果,您可能会发现在安装/准备过程中生成的日志中存在提及该问题的信息。

在此特定情况下,对问题的编辑表明丢失的类本身具有这种不满足的依赖关系。



 类似资料:
  • 问题内容: 我正在使用gradle作为JavaFX插件。即使在 distribution /下 构建和运行可执行文件之后,一切都可以完美运行,但只有一类: 为了多种目的,我创建了以下对象: 在IDE中运行该程序没问题,一切正常。但是,如果我构建并尝试运行.exe文件,则会得到以下-StackTrace: 我真的不明白。怎么可能找不到这个类,而我所有其他的类却都找不到呢? 我的build.gradl

  • 问题内容: 我正在尝试使用JavaMail API发送电子邮件。我从自解压二进制文件在我的主目录中安装了jdk 1.5。我正在使用Ubintu 9.10 我使用下一条命令编译程序: 〜/ jdk1.5.0_22 / bin / javac -classpath〜/ jdk1.5.0_22 / jre / lib / javamail-1.4.3 / mail.jar:〜/ jdk1.5.0_22

  • 问题内容: 我已经创建了自己的文件,并通过将其设置为系统类加载器。它已经初始化,并且一切正常,但是找不到我要加载的类。这是: 我已确认该罐子存在,并且路径正确。这是我在程序中如何称呼它: 这是我得到的例外(第166行是指我尝试创建新行的行: 我什至尝试像这样显式加载类: 是什么原因造成的?它不应该“正常工作”吗? 更新: 这是来自的重要代码 更新2: 这是一个SSCCE:http : //nucl

  • 每隔几次构建,上的构建就会失败,它位于unit JAR中。从下面的日志中可以看到,JUnit包含在类路径中。 这个错误似乎完全是随机出现的。 原木 null 来自父级pom.xml的相关部分 项目本身是一个多模块pom项目,父pom定义了附加的surefire定义。

  • 问题内容: 我正在使用Eclipse管理我的Android项目,该项目使用Amazon的适用于AWS的Android库。我已将库jar文件添加到./libs文件夹,从中我将库添加到了Java构建路径(项目属性-> Java构建路径->库->添加JARS …)。我的应用程序可以正确编译,但是当我在模拟器或电话上运行它时,会出现NoClassDefFoundError。我了解到,正确编译应用程序后通常

  • 我下载了以下链接: http://www.java2s.com/Code/JarDownload/java/java-json.jar.zip 然后,我将jar添加到构建路径:右键单击项目 我能够使用java-json库而不会出现任何错误。然而,当我将项目导出到一个jar时,没有选项将java-json引用库作为jar的一部分。所以我假设通过将库添加到构建路径,我不必导出外部罐(无论如何也没有选项