使用Eclipse导出jar时,这似乎是一个常见问题。现在,我的背景。
我正在尝试编写Java插件以在Unity应用程序中使用。当我做一个没有外部库的简单插件(除了classes.jar,所以我可以调用UnityPlayerActivity),它工作得很好。 “现在,让我们使用一些utils库”。所以我写了一个插件,它使用Jackson库来解析和处理JSON数据,所以我可以将它序列化为Java对象,或者只是传递RAW数据,然后构建一个Unity(C#)对象。
我将库直接从文件系统添加到'libs'文件夹(复制.jars,而不是链接它们),添加到构建路径,检查订单和导出中的每一个,清理和构建,并导出到JAR文件(不可运行,但简单的JAR文件)。然后,我将我的新.jar添加到Unity Assets / Plugins / Android文件夹,然后构建我的.apk。一旦游戏开始,我就会得到经典的NoClassDefFoundError,因为使用了Jackson类的构造函数。检查.jar内容,我发现Jackson库确实已经导出并存放在'libs'文件夹中,但它仍然不会“找到”它。主线程将抛出该错误,因此应用程序将崩溃。
我正在使用ADT和API 17,因此libs文件夹必须命名为'libs'(甚至Eclipse在创建新的Android项目时会创建此文件夹),JRE 1.6和Jackson库ver。 2.2.0。已经在这里提出了很多问题,但他们的建议都没有对我有用。
这里有指针吗? Android API版本有什么要做的吗?有什么我不做的吗?
提前致谢。
答案 0 :(得分:2)
我对Java很新,但据我所知,当你使用外部JAR文件时,它是动态链接的。换句话说,它保持独立 - 它没有合并到你的库中。
这在我的案例中很明显:我使用的外部库是Google Analytics。它的JAR文件libGoogleAnalyticsV2.jar是126 KB。在我将它添加到我的libs目录并构建我的库后,我得到了一个只有2 KB的输出JAR文件......
我的解决方案是将外部库JAR文件与我创建的JAR文件一起复制到Assets / Plugins / Android。