Eclipse中的java.lang.NoClassDefFoundError,但不包含Ant

我对一些Android项目和Eclipse有一个非常奇怪的问题。 我有许多Android项目都使用了大量相同的代码,因此将大量代码移动到Android库项目中。 在很长一段时间里,这对于三个应用程序来说效果很好。 今天,我也希望将这个库用于第四个应用程序,并遇到麻烦。 基本上情况如下:

  • 库项目:包含一组活动以及一些实用程序类
  • 新项目:在某种情况下实例化图书馆项目中的一项活动。

这应该都是微不足道的事情,我甚至在其他三个应用程序中完全相同的事情与完全相同的库项目完全相同的活动。 在新项目中,我在项目属性中引用了库项目,并将库项目中的活动添加到AndroidManifest.xml。 Eclipse现在认识到这一点,并让我参考活动。 一切都是好的。

应用程序运行正常,直到我执行从库项目启动活动的操作。 应用程序退出,logcat告诉我:

FATAL EXCEPTION: main java.lang.NoClassDefFoundError: no.company.application.base.SomeDetailActivity at no.company.someotherapplication.SomeListActivity$4.onClick(SomeListActivity.java:466) at android.view.View.performClick(View.java:2538) at android.view.View$PerformClick.run(View.java:9152) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3691) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) at dalvik.system.NativeStart.main(Native Method) 

这是有趣的开始。 我知道库项目与.apk捆绑在一起,因为我从这个项目中运行了一些实用程序代码。 但是当从Ant编译这个确切的项目时,通过使用命令ant debug然后使用ant installd ,应用程序运行得很好,包括启动活动。 因此,完全相同的项目设置可以在Ant中运行,但不适用于Eclipse。

我尝试过通过谷歌搜索找到的技巧,比如清理所有项目,删除特定项目的.project和.classpath并重新生成它们。 通过将其与工作项目中的清单文件进行比较,我还确保了我的清单文件是正确的。 无论我做什么,我都会再次遇到这个问题。 由于它使用Ant编译和运行得很好,在我看来项目本身没有任何问题,但我真的需要能够通过Eclipse编译它。

编辑:我只是使用dexdump工具反编译Eclipse创建的apk中的classes.dex,并能够确认该类与apk捆绑在一起。 我找到了一个具有正确的类描述符和实例字段的类。 另一方面,我也反编译了Ant生成的版本,并且有很多不同之处。 在这里重复太多了。 使用Ant和Eclipse时,生成的文件是否应该相同?

我刚刚遇到同样的问题。 在我的情况下,我已经为Java构建路径正确设置了它,但忘了添加库。 转到属性 – > Android,然后单击“库”部分中的“添加…”,然后添加库项目。 之后它按预期运行。

有时android插件不会很好地生成导致此类问题的资源。 尝试以下简单程序:

  1. 在其中一个布局xml中更改一些id并保存xml(项目中的任何布局都可以)。
  2. 通过插件编译项目后,将id更改回来并保存。

如果这是问题,那么它应该在项目编译后解决它。

我解决了在最终项目的构建路径中包含jar的问题。 图书馆的构建路径显然还不够。

它很糟糕,但至少它有效。