我对一些Android项目和Eclipse有一个相当奇怪的问题。我有许多Android项目都使用相同的代码,因此已将大量代码移入Android库项目中。长久以来,这对三个应用程序来说工作得非常好。今天,我也想用第四个应用程序库,并遇到麻烦。基本上,情况如下:Eclipse中的java.lang.NoClassDefFoundError,但与Ant不兼容
- 库项目:包含一系列的活动,以及一些实用工具类
- 新项目:实例在某种情况下库项目的活动之一。
这应该都是微不足道的东西,我甚至在完全相同的库项目中完成同样的活动,在三个其他应用程序中完成同样的事情。在新项目中,我引用了项目属性中的库项目,并将库项目中的活动添加到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无关。
我试过了通过Google搜索找到的技巧,比如清理所有项目,删除特定项目的.project和.classpath并重新生成它们。我还通过将它与工作项目中的清单文件进行比较,确保我的清单文件是正确的。无论我做什么,我都会再次遇到这个问题。由于它使用Ant编译和运行得很好,在我看来,项目本身没有任何问题,但我真的需要能够通过Eclipse编译它。
编辑:我只是用dexdump工具反编译Eclipse创建的apk中的classes.dex,并且能够确认该类是与apk捆绑在一起的。我找到了一个具有正确的类描述符和实例字段的类。另一方面,我也反编译Ant生成的版本,并得到了一些不同。太多的重复在这里。使用Ant和Eclipse时生成的文件应该是相同的吗?
我在库项目中更改了一个标识,并且在使用库项目的项目中更改了一个标识,但仍然没有运气。应用程序在完全相同的行上崩溃,具有完全相同的消息。 – Bendik