Android - 无法解析超类

17
我挖出了几年前工作过的一个旧的Android项目,并将其加载到新的Eclipse安装中(包括最新的ADT等)。
项目编译通过了(经过一些小调整),应用程序也可以正常启动,但是当我按下一个按钮启动主活动时,我得到了以下堆栈跟踪:
FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.tmm.android.activities.GameActivity
    at com.tmm.android.activities.StartActivity.onClick(StartActivity.java:53)
    at android.view.View.performClick(View.java:2408)

现在,我考虑的这个类(GameActivity)是我的应用程序中的一个类,因此我知道它不是问题所在 - 但我注意到在logcat的顶部有一个警告:

Unable to resolve superclass of Lcom/tmm/android/activities/GameActivity; (33)
Link of class 'Lcom/tmm/android/activities/GameActivity;' failed

我的GameActivity类继承了第三方jar包中的另一个类(我已将其包含在项目中的'libs'目录中,并在Eclipse中将其添加到了项目构建路径中)。

有人可以提供一些建议,告诉我可能做错了什么,或者需要注意什么(当我最后在Eclipse中使用它时,它工作得很好)。

谢谢


1
似乎有一个依赖关系,超类依赖的内容未安装。 - Roy Hinkley
这个想法确实在我脑海中闪过,但是这个jar包和上次启动应用程序使用的是同一个,所以它看起来很奇怪会不同 - 除非Android库已经被更改了?有没有什么简单的方法可以调试出到底缺少了什么? - rhinds
3个回答

29

我曾遇到同样的问题。我有一个自定义的View类,调用了一个导入的库中的方法。

当应用程序尝试创建我的View(在尝试填充引用该自定义View的布局时)时,我也遇到了“无法解析超类”的错误。

我解决了我的问题并进行了测试以确定我认为是最终答案的东西。

(截至撰写本文时,我正在使用Eclipse Android Tools R21)。

如果您正在使用外部jar文件

  • 将其复制到项目的“libs”文件夹中。Android工具应该会做剩下的事情。

如果您要使用的库是工作区中的单独项目。

  • 在库项目中:进入属性-> Android并选中“Is Library”复选框。
  • 在应用项目中:进入属性-> Android,然后在同一部分中添加库项目(单击“添加..”)。不要在这里选中“Is Library”!

对于此问题的某些答案说您需要转到属性-> Java Build Path->项目,并在那里添加库项目。对于普通的Java项目,您将这样做,但似乎Android工具不需要或使用它。

最后,您可能希望确保该库包含在导出的应用程序中

  • 转到属性-> Java Build Path-> Order and Export并确保选中了库。

天哪,给你一百万个赞,先生!!!添加库... *扶额。由于某种奇怪的原因,普通的项目添加无法正常工作。 - Eric
4
最重要的部分是进入“属性”→“Java构建路径”→“顺序和导出”,确保勾选了该库。此前不需要这样做,从Tools R21或R22开始似乎是需要的。 - Yasitha Waduge
谢谢。我遇到了一个非常烦人的错误,浪费了我10个小时的工作时间:支持库被从另一个项目引用,在编译时一切正常,但在运行时,MainActivity找不到(MainActivity是从支持库中的一个类扩展而来的)。 - Indrek Kõue
感谢您解决了我苦苦挣扎了几个小时的问题。通过“属性> Android>库>添加”添加库项目对我很有帮助。 - Cat

10

好的,最后问题很简单。

将第三方库添加到构建路径后,导出选项未默认为导出jar包(Eclipse的正常行为),因此jar包未被包含在部署中。

已解决该问题。


我还必须将第三方库放在我的导出列表的顶部。 - Kcvin

0

我曾经遇到过同样的问题,我尝试在“Order and Export”下检查Android私有库,但对我没有用。然后我注意到我的libs文件夹没有被引用到Java Build Path中,我只需将其添加到Libraries中即可解决问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接