2

我已经花了一个多星期的时间来研究这个问题,并且我已经尝试了几乎所有可以在 SO 和谷歌上找到的解决方案,但这对我来说仍然没有解决。

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

我正在使用最新版本的 Eclipse Juno。

所以我的设置如下所示:

蚀

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

带有异常的错误消息也会显示在 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)
4

1 回答 1

4

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

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

作为参考,您的 libs 目录(至少)需要如下所示: 在此处输入图像描述

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

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

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

希望有帮助!

于 2013-01-25T03:44:58.670 回答