安卓 java.lang.NoClassDefFoundError

54

我在Eclipse IDE中有一个Android项目,之前是可以工作的。在导入一些内容和进行测试后,我现在遇到了错误:java.lang.NoClassDefFoundError

我的项目中有两个包:主包和第二个包,其中包含一些类。

当我尝试在主Activity类中实例化第二个包中的类的对象时,就会出现这个错误。

以下是logcat:

FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.neurospeech.wsclient.MDPIforEditorialBoard
at milos.mdpi.Journals.<init>(Journals.java:41)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1409)
at android.app.Instrumentation.newActivity(Instrumentation.java:1040)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1777)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
at android.app.ActivityThread.access$1500(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4389)
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:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)

我找到了解决问题的方法:

解决方案在这里:http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17


5
你是否升级了你的Android SDK到17? - pleerock
是的,@Pleerock,Minsky的答案解决了问题。非常感谢。 - Milos Cuculovic
看看这个问答。对我有用!https://dev59.com/gGQn5IYBdhLWcg3wr406 - MSquare
8个回答

55

您最近是否升级了 Eclipse Android 插件(ADT R17)?则以下链接可能会有所帮助:

如何解决 ADT-17 中出现的 ClassDefNotFoundError 错误

更新:问题已经过去一年。我将保留该链接,因为即使在 2013 年,它似乎仍然有助于某些人解决问题。但请注意自己的操作,参见下面 Eric 的评论。

当前 ADT 版本为 22,建议使用最新版本。


1
这对我也起作用了,但是我不得不暂时切换项目目标(在我的情况下从2.2-> 4.0.3),以使其生效。可能是因为我的库已经存储在名为“libs”的目录中。 - Stan Kurdziel
2
警告:该链接建议清除您“库”选项卡中的所有内容。如果您按照这些说明并删除了您的“Android依赖项”虚拟文件夹,则必须创建一个新项目并从头开始重构程序才能恢复它。 - Eric Leschinski
@Chris Sim。不知道您的问题是什么,但我想这里的解决方案并不适用于您的问题。我猜您已经清理并重新构建了您的项目,并且当然在属性中检查了您的库设置是否正确。 - Minsky
当我这样做时:右键单击项目 - 属性 - Java构建路径 - 顺序和导出 - 勾选Android私有库和我添加的所有库,一切都正常工作了,谢谢。 - Chris Sim

26

按照以下顺序编辑构建路径,这对我很有用。

确保/gen/src之前。

输入图像描述


每次我在 /src 前面加上 /gen,Eclipse 就会占用整个内存并冻结我的电脑。 - sma

17

我通过将主项目的私有库添加到此处进行导出来解决了问题:

Project Properties->Java Build Path->Order And Export

确保已勾选 Android 私有库。

截图:

enter image description here

请确保已勾选 google-play-services_lib.jargoogle-play-services.jar。清理项目并重新运行,classNotfound 异常将会消失。


这对我有用,谢谢。 顺便提一下,这是在通过GIT放弃对项目.classpath文件所做的更改后发生的,重新选择“Android Private Properties”实际上会将这两行额外内容添加回.classpath文件中。 - Erwan

1

Imaage

前往项目属性中的“订购和导出”,确保在导出时包含所需的JAR文件,这对我很有帮助。


1

我遇到了几次打开包含其他Android库的旧项目时出现的问题。对我有用的方法是:

将Android移到顺序和导出选项卡的顶部并取消选择它。

是的,这真的有所不同。也许是时候放弃ADT转向Android Studio了!


1
尝试前往 项目 -> 属性 -> Java Build Path -> Order & Export,并确认在您的项目以及您在应用程序中使用的所有其他库项目中都已勾选确认 Android 私有库

1
你可能会遇到这个错误,如果你尝试引入一个使用JDK 1.7编译而不是1.6的jar包。
在我的情况下,我通过尝试使用SDK提供的Ant脚本打包我的应用程序,而不是ADT,我注意到了这些错误,而ADT没有显示给我。
  [dex] Pre-Dexing libjingle_peerconnection.jar -> libjingle_peerconnection-2f82c9bf868a6c58eaf2c3b2fe6a09f3.jar
   [dx]
   [dx] trouble processing:
   [dx] bad class file magic (cafebabe) or version (0033.0000)
   [dx] ...while parsing org/webrtc/StatsReport$Value.class
   [dx] ...while processing org/webrtc/StatsReport$Value.class

我使用JDK 1.6重新编译了我的jar文件,这样就解决了错误。

0

在检查Java构建路径后,然后在清单文件中添加代码行。

<meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接