【问题标题】:NoClassDefFoundError in nested jar (Android)嵌套 jar 中的 NoClassDefFoundError (Android)
【发布时间】:2015-01-25 23:34:33
【问题描述】:

我创建了一个简单的应用程序来测试 NoClassDefFoundError 失败的场景。

让我们举个例子,我有一个带有类 TestClass 的 Test1 android 项目和一些方法。 我将这个 Test1 项目导出为 test1.jar 并仅导出了带有 Class TestClass 和 classpath 和 .project 文件的源文件夹。

在另一个 android 项目 Test2 中,我在我的 libs 文件夹中添加了这个 test1.jar。在这个 Test2 项目中,我有一个 Test2Class 类,它调用 test1.jar 类的方法。

在此之后,我按照上述步骤将此 Test2 项目导出为 test2.jar 文件。

所以当我在另一个项目中使用这个test2.jar 时,我得到了上面的错误NoClassDefFoundError。这是罐子里的罐子的场景。

我应该在哪里做某事,以便我能够访问罐子内的罐子。

提前致谢。

【问题讨论】:

  • 您是否在项目的构建设置中的订单和导出中添加了此广告?
  • 是的,我试过按顺序添加和导出。以及在 libs 文件夹中。我想我尝试了几乎所有与 Order 和 Export 的组合:P。
  • 我认为错误在于 .项目文件。删除它并检查并让我知道它是否有效。
  • 因为 .project 文件有旧路径,就是这样,我面临同样的问题,经过一些谷歌搜索了解这一点。
  • 第三个项目必须同时使用test1.jartest2.jar作为依赖项。

标签: java android eclipse jar noclassdeffounderror


【解决方案1】:

逐步尝试:
1. Remove all library 项目然后清理。
2. 转到第一个项目Test1 右键单击​​属性-> Android。检查Is Library(使其成为库)。
3.转到第二个项目Test2右键单击属性->库部分中的Android选择Add->将第一个项目添加为库。
4. 转到第二个项目Test2 右键单击​​属性-> Android。另外,请检查Is Library
5. 转到第三个project C 右键单击​​属性-> Android。在库部分中选择Add -> 添加第一个和第二个作为库。 (不要将 Proj C 作为库)
6. 现在清理一切并运行Proj C
编辑: 您还可以看到此错误 Bug 405212 - Do not pack jars bundled inside a packed jarBug 361628 - Nested jars cannot be unpacked with Java 1.7。试试上面的方法吧。

【讨论】:

【解决方案2】:

从 java 构建路径中删除 jars。将新文件夹名称添加为“libs”,并在该文件夹中发布所有 jar。应用程序将运行良好

【讨论】:

  • 我仍然有 NoClassDefFoundError。
  • 请交叉检查库和订购和导出部分。里面不应该有罐子。如果是,则将其删除。如果再次出现异常,请发送java构建路径的库和Order和Export的截图。
  • 是的,正如你所说,我将 test1.jar 文件放在 Test2 项目的 libs 文件夹中,并确保它没有顺序并导出并创建了一个 test2.jar .. 以及这个 test2.jar我已经放入了另一个新项目的 libs 文件夹,并确保它没有按顺序导出。​​
  • 哪个类显示NoClassFoundException的错误?请发送logcat
  • 抱歉回复晚了。我得到了 test1.jar 中存在的类的 NoClassDefFoundError 异常。当我试图在 test2.jar 方法中调用 test1.jar 的方法时。
【解决方案3】:

试试这个:

转到 Project/Properties/Java Build Path/Order and Export -- 如果您使用它,请确保在 Android Dependencies 和支持库前面有一个检查。

标记所有复选框并单击应用并清理项目。

【讨论】:

    【解决方案4】:

    这是不可能的。您需要解压缩 JAR 并将它们添加到类路径以公开嵌套的 JAR。请参阅此Java bug 以供参考。

    有几种方法可以正确处理它,例如,参见this question,推荐One-jarUber jarShade

    注意:这与 Java 相关,Andoid 可能表现不同,但似乎有相同的问题。

    【讨论】:

    • 就是这样。不能按你说的做。 One-jar 或 Uber jar 方法有点复杂,也没有合适的教程。
    • 不行,一般的方法是做不到的。为了验证,谷歌搜索“java nested jars”,你会发现很多人有同样的问题。解决方法是解压缩 zar 并将它们添加为未嵌套或使用其他解决方案。
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 2013-07-08
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多