0

我正在尝试在 Eclipse 中启动一个依赖于另一个常规 Java 项目的 Android 项目,该项目又在其构建路径中包含一个 JAR。如果我启动 Android 项目,NoClassDefFoundError当常规 Java 项目的源代码使用 JAR 中的代码时,我会得到一个消息。我尝试了将 JAR 放入 libs 文件夹并将其添加到我的构建路径(甚至将其移动到顶部)的解决方案,但这反过来又会产生Error generating final archive: Found duplicate file for 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 项目失败。如何在我的 Android 项目中正确包含此 JAR?

4

2 回答 2

2

我发现了问题的根源:

  1. bad class file magic (CAFEBABE)使用 Android 编译时,控制台在遇到包含的 JAR/项目时正在读取。这导致它不包含在构建中
  2. 当应用程序使用引用的 JAR 时,它找不到它,但是桌面程序没有产生相同的错误输出并且可以使用 JAR。
  3. 问题是我已将代码移动到另一个 Java 项目,该项目默认设置为使用 Java 7,而 Android 仅支持 Java 6,而它从中迁移的原始项目设置为使用 Java 6(如配置通过 LibGDX 的设置向导)。这解释了为什么该项目可以在我的桌面(可以执行 Java 7)上运行,但不能在 Android 上运行。
  4. 当我使用 Java 6 重新编译 JAR 时,Android 能够解析 JAR 并将其包含在项目中。
于 2013-08-14T15:32:31.160 回答
1

确保 JAR 被选中为“exported”:右键单击项目 -> Properties -> Java Build Path -> Order and Export 选项卡 -> 确保选中 JAR 条目(或“Android Private Libraries”)。

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

于 2013-08-13T19:22:37.203 回答