Android上Java库中的代码的NoClassDefFoundError

kjo*_*bro 75 android noclassdeffounderror

我的用户经常遇到错误.应用程序在启动期间崩溃.当应该加载MainActivity时,VM显然无法找到该类.我无法弄清楚为什么.该应用程序的体系结构是我的免费和专业版都使用的共同项目.不知道它是否相关.请参阅下面的堆栈跟踪.有什么想法吗?

java.lang.NoClassDefFoundError: com.android.common.MainActivity
at com.mycompany.myapp.Splash.onCreate(Splash.java:23)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.android.common.MainActivity in loader     dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.android.pro-1.apk]
Run Code Online (Sandbox Code Playgroud)

编辑: 感谢下面的评论,理查德.现在我已经改变com.android.Splash了别的东西.反正它不是真正的类名.我的错...!

Sab*_*abo 125

我有同样的问题,我做了以下修复问题.

  1. 转到项目的"属性".
  2. 选择"Java Build Path"
  3. 选择"订购和导出"选项卡
  4. 您应该在这里看到所选项目的"src"和"gen"路径和依赖项.
  5. 他们列出的顺序是第一个"src"然后是"gen"路径
  6. 我切换它们,以便在"src"之前构建"gen"文件夹

gen - 项目中的自动代码(来自依赖项和引用)
src - 项目中的源代码

没有必要重新启动Eclipse.它刚刚开始工作.

老实说,我从未尝试过"Android工具>修复项目属性",有时它可能会做同样的事情.我不知道,我刚刚看到错误信息之后做了以上,认为构建路径有问题.


编辑


后来这还不够,我再次收到错误.然后我"检查"了该视图中列出的所有依赖项.现在再次运作.到现在为止还挺好.如果再次失败,我会保持更新.

仅供参考:在我的最后一次尝试中,我尝试了"Android工具>修复项目属性",但它对我来说无效.

  • 你编辑的答案对我有用.谢谢. (5认同)
  • 你编辑过的ans也为我工作过......由于ClassDefNotFoundError,我已经把头发拉了2-3个小时 (4认同)

Dan*_*OMS 18

我目前正在使用SDK 20.0.3,之前的解决方案都不适用于我.

我能够把事情搞定

  • 右键单击Android项目
  • 然后选择Build Path - > Link Source以显示Link Source对话框.
  • 然后我指定了Java项目的'src'文件夹,并为其命名,而不是默认的'src'(例如'src2').
  • 您现在可以右键单击 - >删除新的'src2'文件夹.

这带来了这个创建的Java类文件,这些文件是在构建Android项目时为Dalvik VM而不是Java VM编译的.这允许Android库jar文件中的Java类文件在创建Android项目.apk时通过dexing.现在,当应用程序运行时,发现Java项目类而不是抛出Java.lang.NoClassDefFoundError.

如果您想使用jar文件而不是链接源,那么您将需要创建一个Library Android项目.(在属性 - > Android中选中了'是库'的Android项目.)然后,您需要将Java项目的源链接到Android库项目,如上所述,或者从'src'文件夹中复制源文件. Java项目到Android库项目的'src'文件夹.构建Android库项目.然后,您将能够将创建的Android项目jar文件复制到Android文件夹的"libs"文件夹中,因为在构建Android项目时,其中的类文件是为Davlik VM而不是Java VM编译的.这允许Android库jar文件中的Java类文件在创建Android项目.apk时通过dexing.


小智 17

尝试转到项目 - >属性 - > Java构建路径 - >订单和导出,并确保为您的项目和您正在使用的所有其他库项目检查Android私有库.我通过以下链接NoClassDefFoundError Android Project得到了解决方案?


Sou*_*osh 8

为了防止有人,我遇到了同样的问题.我的jar文件位于libs目录下,jar被添加到构建路径中.仍然是抛出这个例外.

我刚刚清理了项目,它对我有用.

Eclipse - >项目 - >清理 - >选择项目并清理


DD.*_*DD. 7

我尝试了上面提到的所有解决方案,但没有为我解决,这是我做的完成项目 - >配置构建路径 - >订单和导出 - >移动依赖项目在顶部


T. *_*kle 6

当您制作使用Google API的应用(例如地图)但在面向Android API的设备上运行时,也会生成此错误.


gm2*_*008 5

我使用java.nio.charset.StandardCharsets时遇到了这个NoClassDefFoundError.

原因是StandardCharsets直到JRE 1.7才存在.如果我将java编译版本设置为1.7,Eclipse抱怨"Android需要编译器合规级别5.0或6.0".所以,我通过右键单击项目名称 - > Android工具 - >修复项目属性来修复它.它是用JRE1.6编译的.

但是,因为StandardCharsets直到1.7才存在.它在我运行时报告了NoClassDefFoundError.

在尝试了很多其他方法(包括重新安装JDK)之前,我还没有意识到这一点.NoClassDefFoundError的含义清楚地说明了真正的原因:虽然它通过了编译,但在运行时无法找到该类.

一般的结论是,只要Android不能与JRE 1.7一起使用,如果使用自1.7以来提供的任何新功能,您将遇到此错误.

我的解决方案是我将这些源代码复制到我的代码中!