【发布时间】:2011-12-12 12:51:58
【问题描述】:
我对一些 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 eclipse ant noclassdeffounderror