Android中未解决的NoClassDefFoundError

时间:2013-01-19 17:53:31

标签: java android noclassdeffounderror

我花了一周时间研究这个问题,我已经尝试了几乎所有解决方案都可以通过SO和谷歌找到,但这对我来说仍然没有得到解决。

我有一个外部库gdx-audio.jar,我已将其导入我的libs文件夹并将其添加到构建路径中。

我使用的是最新版本的Eclipse Juno。

所以我的设置如下:

Eclipse

注意与我的jar一起使用的libs文件夹,以及它在Android依赖项和引用库中显示的文件夹。此外,在构建路径窗口的顺序和导出选项卡中检查所有内容,这对某些人来说是一种解决方案,但不适合我。

此外,logcat窗口中还显示了带有异常的错误消息。 (尝试将所有内容都放在一个屏幕截图中)。

我对订单和出口的正确排序有点不确定,但我尝试了很多订单无济于事。我已经读过其他人的帖子以确保gen在src之前,并且我已经设置了jar文件。

任何人都可以提供的帮助将不胜感激。

我的清单文件中有什么特别之处吗?或者我只是错过了一些小事?

编辑:这是LogCat输出:

01-23 14:37:20.917: I/dalvikvm(6699): Failed resolving Lcom/badlogic/gdx/audio/analysis/KissFFT; interface 79 'Lcom/badlogic/gdx/utils/Disposable;'
01-23 14:37:20.917: W/dalvikvm(6699): Link of class 'Lcom/badlogic/gdx/audio/analysis/KissFFT;' failed
01-23 14:37:20.917: E/dalvikvm(6699): Could not find class 'com.badlogic.gdx.audio.analysis.KissFFT', referenced from method ubicomp.signalproccesor.SignalProcessorDemo.<init>
01-23 14:37:20.917: W/dalvikvm(6699): VFY: unable to resolve new-instance 65 (Lcom/badlogic/gdx/audio/analysis/KissFFT;) in Lubicomp/signalproccesor/SignalProcessorDemo;
01-23 14:37:20.917: D/dalvikvm(6699): VFY: replacing opcode 0x22 at 0x0009
01-23 14:37:20.917: I/dalvikvm(6699): Failed resolving Lcom/badlogic/gdx/audio/analysis/KissFFT; interface 79 'Lcom/badlogic/gdx/utils/Disposable;'
01-23 14:37:20.917: W/dalvikvm(6699): Link of class 'Lcom/badlogic/gdx/audio/analysis/KissFFT;' failed
01-23 14:37:20.917: D/dalvikvm(6699): DexOpt: unable to opt direct call 0x0186 at 0x0d in Lubicomp/signalproccesor/SignalProcessorDemo;.<init>
01-23 14:37:20.917: D/AndroidRuntime(6699): Shutting down VM
01-23 14:37:20.917: W/dalvikvm(6699): threadid=1: thread exiting with uncaught exception (group=0x40efd300)
01-23 14:37:20.917: E/AndroidRuntime(6699): FATAL EXCEPTION: main
01-23 14:37:20.917: E/AndroidRuntime(6699): java.lang.NoClassDefFoundError: com.badlogic.gdx.audio.analysis.KissFFT
01-23 14:37:20.917: E/AndroidRuntime(6699):     at ubicomp.signalproccesor.SignalProcessorDemo.<init>(SignalProcessorDemo.java:41)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at java.lang.Class.newInstanceImpl(Native Method)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at java.lang.Class.newInstance(Class.java:1319)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.os.Looper.loop(Looper.java:137)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at android.app.ActivityThread.main(ActivityThread.java:4745)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at java.lang.reflect.Method.invokeNative(Native Method)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at java.lang.reflect.Method.invoke(Method.java:511)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-23 14:37:20.917: E/AndroidRuntime(6699):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)

1 个答案:

答案 0 :(得分:4)

为了验证,我使用您尝试使用的库文件加载了一个默认项目并验证了同样的问题。这不是您的IDE配置; gdx-audio JAR库并不是独立的,它是较大的gdx框架中的扩展,并且依赖于其他JAR中的其他类作为该库包的一部分。如果没有KissFFT(抛出错误的类)导入的类,则无法加载该类。

不可否认,错误有点误导,它应该告诉你它找不到的类是com.badlogic.gdx.utils.Disposablecom.badlogic.gdx.utils.SharedLibraryLoader。事实证明com.badlogic.gdx.utils包位于gdx.jar文件中,因此除了gdx.jar之外,您还必须包含gdx-audio.jar才能使用该库扩展。

作为参考,这里你的libs目录(至少)需要如下所示: enter image description here

如果你还没有它,这里是该框架官方网站的链接。我不能肯定地说,但是一些必需的依赖项有望在他们的文档中的某处:http://libgdx.badlogicgames.com/

SIDE注意:您永远不需要使用Eclipse手动将JAR文件添加到Android项目的构建路径中。 ADT负责从libs/目录中获取所有内容并将其构建为依赖项。通过添加这个来做的所有事情就是创建重复,最终会导致更多的问题,如果您使用除Eclipse内部的构建系统之外的同样难以跟踪的问题。

这就是您必须在项目列表中设置依赖关系的原因。 “引用的库”是由Eclipse创建的,不应该存在。 “Android Dependencies”是ADT创建的,应该是列出的唯一库集(除了“Android x.x”,这是您的框架SDK)。

希望有帮助!