我有一个相当奇怪的问题与一些Android项目和Eclipse。我有很多Android项目都使用了相同的代码,因此我将很多代码移到了Android Library项目中。很长一段时间以来,这在三个应用程序上运行得很好。今天,我想把这个库也用在第四个应用程序上,却遇到了麻烦。基本上,情况如下:
- 库项目:包含一组活动以及一些实用程序类
- 新项目:在特定情况下实例化库项目中的一个活动。
这些应该都是微不足道的东西,我甚至在来自完全相同的库项目的完全相同的活动的其他三个应用程序中做了完全相同的事情。在新项目中,我在项目属性中引用了库项目,并将库项目中的活动添加到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来编译它。
EDIT:我刚刚用dexdump工具在Eclipse创建的apk中反编译了classes.dex,并且能够确认类与apk捆绑在一起。我找到了一个具有正确的类描述符和实例字段的类。另一方面,我也对Ant生成的版本进行了反编译,得到了相当多的差异。太多了,这里就不赘述了。当使用Ant和Eclipse时,生成的文件应该是相同的吗?
我也遇到了同样的问题。在我的例子中,我为Java构建路径正确地设置了它,但忘记添加库。进入属性-> Android,然后在库部分点击"添加…",然后添加库项目。
有时android插件不能很好地生成资源,从而导致这些问题。试试下面的简单步骤:
- 在布局xml中更改一些id并保存xml(项目中的任何布局都可以)
- 插件编译完成后将id改回并保存
如果这是问题,那么应该在项目编译后解决它。
我解决了在最终项目的构建路径中包含jar。库的构建路径显然不够。