【问题标题】:Exporting .jar to use in Unity with 3rd-party libs included: NoClassDefFoundError导出 .jar 以在 Unity 中使用,包括:NoClassDefFoundError
【发布时间】:2013-06-02 23:50:48
【问题描述】:

这似乎是使用 Eclipse 导出 jar 时的常见问题。现在,我的上下文。

我正在尝试编写 Java 插件以在 Unity 应用程序中使用。当我做了一个没有外部库的简单插件(classes.jar 除外,所以我可以调用 UnityPlayerActivity)时,它工作得很好。 “现在,让我们使用一些实用程序库”。所以我写了一个插件,它使用 Jackson 库来解析和处理 JSON 数据,所以我可以将它序列化为 Java 对象,或者只是传递 RAW 数据,然后构建一个 Unity (C#) 对象。

我将库直接从文件系统添加到'libs'文件夹(复制.jars,而不是链接它们),添加到构建路径,检查Order and Export中的每一个,清理和构建,然后导出到 JAR 文件(不可运行,而是简单的 JAR 文件)。然后,我将新的 .jar 添加到 Unity Assets/Plugins/Android 文件夹,然后构建我的 .apk。游戏一开始,我就得到了经典的 NoClassDefFoundError,因为构造函数使用了 Jackson 类。检查 .jar 内容,我发现 Jackson 库确实已导出并位于“libs”文件夹中,但仍然无法“找到”它。错误会被主线程抛出,导致应用崩溃。

我在 API 17 中使用 ADT,因此 libs 文件夹必须命名为“libs”(即使 Eclipse 在创建新的 Android 项目时也会创建此文件夹),JRE 1.6 和 Jackson 库版本。 2.2.0。已经在这里关注了很多问题,但他们的建议都没有对我有用。

这里有什么建议吗? Android API 版本在这里有什么用吗?有什么我没有做的吗?

提前致谢。

【问题讨论】:

    标签: android eclipse jar unity3d adt


    【解决方案1】:

    我对 Java 很陌生,但据我所知,当您使用外部 JAR 文件时,它是动态链接的。换句话说,它保持独立 - 它不会合并到您的库中。

    这在我的例子中很明显:我使用的外部库是 Google Analytics。它的 JAR 文件 libGoogleAnalyticsV2.jar 为 126 KB。在我将它添加到我的 libs 目录并构建我的库后,我得到了一个只有 2 KB 的输出 JAR 文件......

    我的解决方案是将外部库 JAR 文件与我创建的 JAR 文件一起复制到 Assets/Plugins/Android。

    【讨论】:

    • 感谢您的回复,对于我迟到的回复感到抱歉。我做了你建议的同样的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2013-09-21
    • 1970-01-01
    • 2013-10-15
    • 2013-07-08
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多