2011-12-12 67 views
3

我对一些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时生成的文件应该是相同的吗?

回答

0

有时android插件不会很好地生成资源,从而导致此类问题。尝试遵循以下简单步骤:

  1. 更改某个布局xml中的某个id并保存xml(项目中的任何布局将执行此操作)。
  2. 项目编译后通过插件将id更改回并保存。

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

+0

我在库项目中更改了一个标识,并且在使用库项目的项目中更改了一个标识,但仍然没有运气。应用程序在完全相同的行上崩溃,具有完全相同的消息。 – Bendik

0

我解决了将jar包括在最终项目的构建路径中。库的构建路径显然是不够的。

它很烂,但起码它起作用。

2

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

+0

由于同样的问题,我见过'java.lang.VerifyError'。库类被用在'catch'子句中,所以与库相关的问题早于(比方法调用的情况下)被检测到,并且表现为不同的异常。 – 18446744073709551615

相关问题