【问题标题】:Android application unhandled exception: Could not find class 'X', referenced from method 'Y'Android 应用程序未处理异常:找不到类“X”,从方法“Y”引用
【发布时间】:2012-12-14 16:24:25
【问题描述】:

我对 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库路径中
  • 构建了一个引用我从 java 库构建的 jar 的 android 项目库,然后将 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,比如 apaches common.io jar 在它自己的“libs”下的目录中,这导致了一个问题。

【问题讨论】:

标签: java android eclipse


【解决方案1】:

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

最有用的帖子似乎是:

  1. 文件->导入->常规->现有项目到工作区,下一步
  2. 选择根目录:/path/to/project
  3. 项目->全选
  4. 取消选中“将项目复制到工作区”和“将项目添加到工作集”
  5. 完成

要将其添加为另一个项目的库,请参阅 Android 开发网站的 this link

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

【讨论】:

  • 如前所述,已经尝试创建一个 android 项目库。你是说我可能没有正确完成这些程序吗?因为我遵循了你在信中提到的 android 文档。
  • 你能链接到你正在使用的库项目吗?
  • 是的,android 库已添加到我的项目库列表中。在我添加jar的方法中,jar可以在android依赖项下查看。
  • 虽然我已经尝试过了,但我的程序似乎存在一些问题,这使得它看起来只有一个问题。 android 记录的创建 android 库的方式最终为我解决了。谢谢。
【解决方案2】:

我有同样的问题。终于找到了解决办法。

你导入的java项目应该在你构建你的android项目的时候就构建好了。

Java build path -> Order and Export,检查java项目,然后重建你的android项目。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多