1

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

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

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

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

这里有任何指示吗?Android API 版本在这里有什么用吗?有什么我没有做的吗?

提前致谢。

4

1 回答 1

3

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

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

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

于 2013-07-16T16:34:48.823 回答