Android应用程序未处理的异常:无法找到类'X',从方法'Y'引用

时间:2012-12-14 16:24:26

标签: java android eclipse

我对Android开发有点新意,所以请耐心等待。

我已经审核过此MapView: Could not find class A referenced from method B和此Could not find method XXX, referenced from method YYY

但他们没有帮助解决我的问题。

在尝试运行我的应用时,我收到了问题标题中报告的错误。我的应用程序需要一个我从Github中提取的java项目,它本身需要一些jar文件才能自行编译。我编译了java项目,Eclipse使我的android项目看起来被编译,但它在我的手机上无法正常工作。

我尝试了以下内容,所有结果都相同:

  • 使用java构建路径
  • 直接引用了java库
  • 构建了一个android项目库,它直接使用java构建路径引用java库,然后将android项目库添加​​到我的项目android库路径
  • 构建了一个android项目库,它引用了我从java库构建的jar,然后将android项目库添加​​到我的项目android库路径
  • 从java库中构建一个jar,然后将jar添加到我的android项目的构建路径

最终结果总是一样的,我的程序编译但是当我尝试运行时崩溃说GitHub项目中的“找不到类”类“引自”我的主要活动方法“

有人可以扔骨头吗?

logcat的

    12-14 11:08:49.792: I/Process(5538): Sending signal. PID: 5538 SIG: 9
12-14 11:09:56.722: D/szipinf(5626): Initializing inflate state
12-14 11:09:56.732: E/dalvikvm(5626): Could not find class 'gmusic.api.impl.GoogleSkyJamAPI', referenced from method com.example.gpmx.MainActivity.runGoogleAPI
12-14 11:09:56.732: W/dalvikvm(5626): VFY: unable to resolve new-instance 445 (Lgmusic/api/impl/GoogleSkyJamAPI;) in Lcom/example/gpmx/MainActivity;
12-14 11:09:56.732: D/dalvikvm(5626): VFY: replacing opcode 0x22 at 0x0000
12-14 11:09:56.732: D/dalvikvm(5626): VFY: dead code 0x0002-0036 in Lcom/example/gpmx/MainActivity;.runGoogleAPI (Ljava/lang/String;Ljava/lang/String;)V
12-14 11:09:56.812: D/AndroidRuntime(5626): Shutting down VM
12-14 11:09:56.812: W/dalvikvm(5626): threadid=1: thread exiting with uncaught exception (group=0x40018560)
12-14 11:09:56.812: E/AndroidRuntime(5626): FATAL EXCEPTION: main
12-14 11:09:56.812: E/AndroidRuntime(5626): java.lang.NoClassDefFoundError: gmusic.api.impl.GoogleSkyJamAPI
12-14 11:09:56.812: E/AndroidRuntime(5626):     at com.example.gpmx.MainActivity.runGoogleAPI(MainActivity.java:63)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at com.example.gpmx.MainActivity.onResume(MainActivity.java:36)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.Activity.performResume(Activity.java:3832)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2231)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2256)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1789)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.os.Looper.loop(Looper.java:130)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at android.app.ActivityThread.main(ActivityThread.java:3835)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at java.lang.reflect.Method.invokeNative(Native Method)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at java.lang.reflect.Method.invoke(Method.java:507)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
12-14 11:09:56.812: E/AndroidRuntime(5626):     at dalvik.system.NativeStart.main(Native Method)

如果这有帮助,还有一条信息。我正在使用的java项目依赖于各种apache和google jar,它们位于java项目“lib”(不是“libs”)文件夹中。创建jar时这是一个问题吗?

最终更新 事实证明,有一个教训。至少在我的配置中,我在android库中需要的所有jar都必须在同一目录级别,即在“libs”下。我有几个必需的jar,比如apache common.io jar在它自己的“libs”目录下,这导致了一个问题。

2 个答案:

答案 0 :(得分:3)

请参阅this SO post以正确将现有项目导入Eclipse ...

最有用的帖子似乎是:

  1. 文件 - >导入 - >常规 - >现有项目到工作区,下一步
  2. 选择根目录:/ path / to / project
  3. 项目 - >全选
  4. UNCHECK“将项目复制到工作区”和“将项目添加到工作集”
  5. 完成
  6. 要将其添加为其他项目的库,请参阅Android开发者网站的this link

    1. 在Package Explorer中,右键单击库项目,然后选择Properties。
    2. 在“属性”窗口中,选择左侧的“Android”属性组,然后找到右侧的“库”属性。
    3. 选中“是库”复选框,然后单击“应用”。

答案 1 :(得分:0)

将OSMDroid导入我的应用后,我遇到了同样的问题。我检查了LogCat输出,这表明Dex加载器在OSMDroid中找不到特定的类(GeoPoint)。我意识到bin文件夹中没有类文件,即它尚未编译。原因是我的导入已将源放入名为“org”的库中,而不是放入“src”中。将它移动到“src”并重建OSMDroid会在“bin”中生成正确的Class文件,现在一切正常。