Java Android NoClassDefFoundError vs.生成最终存档时出错:找到APK的重复文件:

Java Android NoClassDefFoundError vs.生成最终存档时出错:找到APK的重复文件:,java,android,jar,dependencies,libgdx,Java,Android,Jar,Dependencies,Libgdx,我试图在Eclipse中启动一个Android项目,该项目依赖于另一个常规Java项目,该项目的构建路径中包含一个JAR。如果我启动Android项目,当来自常规Java项目的源代码使用来自JAR的代码时,我会得到一个NoClassDefFoundError。我尝试过将JAR放入libs文件夹并将其添加到我的构建路径(甚至将其移动到顶部)的解决方案,但是这反过来会生成生成生成最终存档的错误:为APK:libs/gdx.JAR找到重复文件错误。视觉上: [JAR not in Android pa

我试图在Eclipse中启动一个Android项目,该项目依赖于另一个常规Java项目,该项目的构建路径中包含一个JAR。如果我启动Android项目,当来自常规Java项目的源代码使用来自JAR的代码时,我会得到一个
NoClassDefFoundError
。我尝试过将JAR放入libs文件夹并将其添加到我的构建路径(甚至将其移动到顶部)的解决方案,但是这反过来会生成生成生成最终存档的
错误:为APK:libs/gdx.JAR找到重复文件
错误。视觉上:

[JAR not in Android path]: Android Project -> Java Project -> Jar -> NoClassDefFoundError
[JAR in Android path]:     Android Project -> Java Project -> JAR -> Duplicate file for APK Error

具体来说,这是一个LibGDX项目。我制作了一个JAR,它封装了一些我将重用的常见LibGDX功能。当我运行我的桌面项目时(没有修改它的构建路径),它运行得很好,但是Android项目失败了。如何将这个JAR正确地包含在我的Android项目中?

确保JAR被选中为“导出”:右键单击项目->属性->Java构建路径->订单和导出选项卡->确保选中JAR条目(或“安卓专用库”)


我有一个类似的设置(一个包含Libgdx依赖的“公共”代码的项目,我在Libgdx项目中共享该代码)。但是,我没有构建JAR,而是直接包含项目。(Java构建路径->项目选项卡->添加…)。我必须在所有Libgdx项目(common、desktop、android等)中明确包含我的CommonProject,而不是从Libgdx common项目“继承”到android项目。您可能需要对JAR文件执行类似的操作。

确保JAR被选中为“已导出”:右键单击项目->属性->Java构建路径->订单和导出选项卡->确保选中JAR条目(或“安卓专用库”)


我有一个类似的设置(一个包含Libgdx依赖的“公共”代码的项目,我在Libgdx项目中共享该代码)。但是,我没有构建JAR,而是直接包含项目。(Java构建路径->项目选项卡->添加…)。我必须在所有Libgdx项目(common、desktop、android等)中明确包含我的CommonProject,而不是从Libgdx common项目“继承”到android项目。您可能需要对JAR文件执行类似的操作。

我发现了问题的根源:

  • 使用Android编译时,控制台在读取
    坏类文件magic(CAFEBABE)
    时碰到了附带的JAR/项目。这导致它没有包含在构建中
  • 当应用程序使用引用的JAR时,它找不到它,但是桌面程序没有产生相同的错误输出,可以使用JAR
  • 问题是,我将代码移动到了另一个Java项目,该项目默认设置为使用Java7,Android只支持Java6,而它迁移过来的原始项目设置为使用Java6(由LibGDX的安装向导配置)。这就解释了为什么这个项目可以在我的桌面上运行(它可以运行Java7),而不能在Android上运行
  • 当我用Java6重新编译JAR时,Android能够解析JAR并将其包含在项目中

  • 我发现了问题的根源:

  • 使用Android编译时,控制台在读取
    坏类文件magic(CAFEBABE)
    时碰到了附带的JAR/项目。这导致它没有包含在构建中
  • 当应用程序使用引用的JAR时,它找不到它,但是桌面程序没有产生相同的错误输出,可以使用JAR
  • 问题是,我将代码移动到了另一个Java项目,该项目默认设置为使用Java7,Android只支持Java6,而它迁移过来的原始项目设置为使用Java6(由LibGDX的安装向导配置)。这就解释了为什么这个项目可以在我的桌面上运行(它可以运行Java7),而不能在Android上运行
  • 当我用Java6重新编译JAR时,Android能够解析JAR并将其包含在项目中

  • 你在使用Eclipse吗?你在使用Eclipse吗?是的,它被标记为导出。问题依然存在。我将尝试手动链接所有类似的项目。我将该项目包括在生成路径中,选中它,并将其移动到顶部,问题仍然存在。@GraphicsMancher尝试不导出android依赖项和android私有项libaries@VikalpJain重新启用Android私有库会导致应用程序在启动时出错(ClassLoader),删除依赖项没有任何作用。@graphicmucher:您能上传导出的java依赖项的快照和主项目导出的依赖项吗?是的,它标记为导出。问题依然存在。我将尝试手动链接所有类似的项目。我将该项目包括在生成路径中,选中它,并将其移动到顶部,问题仍然存在。@GraphicsMancher尝试不导出android依赖项和android私有项libaries@VikalpJain重新启用Android私有库会导致应用程序在启动时出错(ClassLoader),删除依赖项没有任何作用。@graphicmucher:您能上传导出的java依赖项和主项目导出的依赖项的快照吗