有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 java。Eclipse中的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 安卓.view.View.performClick(View.java:2538)
    at 安卓.view.View$PerformClick.run(View.java:9152)
    at 安卓.os.Handler.handleCallback(Handler.java:587)
    at 安卓.os.Handler.dispatchMessage(Handler.java:92)
    at 安卓.os.Looper.loop(Looper.java:123)
    at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:605)
    at dalvik.system.NativeStart.main(Native Method)

这就是乐趣的开始。我知道图书馆项目与。apk,因为我有一些运行此项目的实用程序代码。但是当从Ant编译这个确切的项目时,通过使用命令ant debugant installd,应用程序运行良好,包括启动活动。因此,完全相同的项目设置在Ant上运行良好,但在Eclipse上运行不好

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

编辑:我刚刚反编译了类。Eclipse使用dextump工具创建的apk中的dex,并且能够确认该类与apk绑定。我找到了一个具有正确的类描述符和实例字段的类。另一方面,我还对Ant生成的版本进行了反编译,得到了一些差异。这里重复的太多了。当使用Ant和Eclipse时,生成的文件应该是相同的吗


共 (3) 个答案

  1. # 1 楼答案

    我也遇到了同样的问题。在我的例子中,我为Java构建路径正确地设置了它,但忘记添加库。转到属性->;然后点击“添加…”在“库”部分中,然后添加库项目。之后,它按预期运行

  2. # 2 楼答案

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

    这很糟糕,但至少能起作用

  3. # 3 楼答案

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

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

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