Java Android中未解决的NoClassDefFoundError

Java Android中未解决的NoClassDefFoundError,java,android,noclassdeffounderror,Java,Android,Noclassdeffounderror,我花了一个多星期的时间研究这个问题,我尝试了几乎所有能在SO和google上找到的解决方案,但这对我来说仍然没有解决 我有一个外部库gdx-audio.jar,我通过将它放在我的libs文件夹中并将其添加到构建路径中导入了它 我正在使用最新版本的EclipseJuno 因此,我的设置如下所示: 请注意带有my jar的libs文件夹,以及它显示在Android依赖项和引用库中。此外,所有内容都在build path窗口的order and export选项卡中进行检查,这对一些人来说是一个解决方

我花了一个多星期的时间研究这个问题,我尝试了几乎所有能在SO和google上找到的解决方案,但这对我来说仍然没有解决

我有一个外部库gdx-audio.jar,我通过将它放在我的libs文件夹中并将其添加到构建路径中导入了它

我正在使用最新版本的EclipseJuno

因此,我的设置如下所示:

请注意带有my jar的libs文件夹,以及它显示在Android依赖项和引用库中。此外,所有内容都在build path窗口的order and export选项卡中进行检查,这对一些人来说是一个解决方案,但对我来说不是

此外,带有异常的错误消息显示在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)

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

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

作为参考,您的libs目录至少需要如下所示:

如果您还没有,这里是该框架官方网站的链接。我不能肯定,但一些必需的依赖关系可能会出现在他们的文档中:

旁注:在使用Eclipse的Android项目中,您永远不需要手动将JAR文件添加到构建路径。ADT的工作是从libs/目录中获取所有内容,并将其构建为依赖项。如果您使用Eclipse内部的构建系统之外的构建系统,那么添加这些系统所做的一切就是创建复制,这最终将导致更多的问题,这些问题同样难以跟踪

这就是为什么必须在项目列表中添加依赖项集。引用的库是由Eclipse创建的,不应该存在。Android依赖项是ADT创建的,并且应该是除了Android x.x之外列出的唯一库集,Android x.x是您的框架SDK


希望有帮助

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

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

作为参考,您的libs目录至少需要如下所示:

如果您还没有,这里是该框架官方网站的链接。我不能肯定,但一些必需的依赖关系可能会出现在他们的文档中:

旁注:在使用Eclipse的Android项目中,您永远不需要手动将JAR文件添加到构建路径。ADT的工作是从libs/目录中获取所有内容,并将其构建为依赖项。如果您使用Eclipse内部的构建系统之外的构建系统,那么添加这些系统所做的一切就是创建复制,这最终将导致更多的问题,这些问题同样难以跟踪

这就是为什么必须在项目列表中添加依赖项集。引用的库是由Eclipse创建的,不应该存在。Android依赖项是ADT创建的,并且应该是除了Android x.x之外列出的唯一库集,Android x.x是您的框架SDK


希望有帮助

尝试反编译APK并检查是否看到文件
如果它们不在那里,您可能需要将文件注入到项目中。另一种处理方法是学习Ant或其他构建编译语言,并使用Android SDK工具使用Ant编译您的项目,这肯定会解决您的问题。您是否已将libgdx-audio.so文件复制到libs/armeabi/和libs/armeabi-v7a/中?这些文件包含在运行时加载的本机代码。感谢您的反馈,我开始尝试这两种建议。我下载了apktool并反编译了apk,但是如果这些文件存在,我会在哪里看到它们呢@acj我下一步会给你的建议一次机会,这可能就是我所需要的。问题是我以前工作得很好,但可能这些文件被移动或删除了。我会告诉你我发现了什么,谢谢。@acj,我没有libs/armeabi和libs/armeabi-v7a文件夹。我已经在每个文件夹下添加了它们和相应的文件。然而,它仍然有同样的失败,还有什么我需要做的链接这些文件夹?文件应该出现在一个lib或libs目录,一旦你解压的apk。如果你还没有清理项目,一定要清理。从您的屏幕截图来看,您似乎正在将jar导出。你最近更新了ADT吗?如果可能,请发布更多的Logcat输出。尝试反编译APK并检查是否看到文件,如果没有,则可能需要将文件注入项目中。另一种处理方法是学习Ant或其他构建编译语言,并使用Android SDK工具使用Ant编译您的项目,这肯定会解决您的问题。您是否已将libgdx-audio.so文件复制到libs/armeabi/和libs/armeabi-v7a/中?这些文件包含在运行时加载的本机代码。感谢您的反馈,我开始尝试这两种建议。我下载了apktool并反编译了apk,但是如果这些文件存在,我会在哪里看到它们呢@acj我下一步会给你的建议一次机会,这可能就是我所需要的。问题是我以前工作得很好,但可能这些文件被移动或删除了。我会告诉你我发现了什么,谢谢。@acj,我没有libs/armeabi和libs/armeabi-v7a文件夹。我已经在每个文件夹下添加了它们和相应的文件。然而,它仍然有同样的失败,还有什么我需要做的链接这些文件夹?文件应该出现在一个lib或libs目录,一旦你解压的apk。如果你还没有清理项目,一定要清理。从您的屏幕截图来看,您似乎正在将jar导出。你最近更新了ADT吗?如果可能,请发布更多的Logcat输出。是的,就是这样!非常感谢你花时间帮我调查这件事,我当时真的很茫然。还感谢您对Android依赖项与引用库的澄清。非常感谢,就是这样!非常感谢你花时间帮我调查这件事,我当时真的很茫然。还感谢您对Android依赖项与引用库的澄清。非常感谢