3

我正在开发一个 android 库,并希望导出一个 JAR 文件,我可以将其分发给其他人在他们的应用程序中使用。我不想分发源代码,因为它包含有关发布到我的 Web 服务器的详细信息。

我尝试使用在 bin 目录中创建的 JAR 文件并将 jar 文件复制到我的项目中并在我的项目中引用它并勾选导出按钮。

当我尝试运行引用我复制的库的项目时,我的应用程序会引发异常,并带有NoClassDefFoundError. 我做了一些谷歌搜索,我发现的所有内容都表明您必须提供源代码并让用户导入他们的 IDE,然后将该项目引用到他们的应用程序中,这是我不想做的。这必须是可能的,因为其他公司为可以包含的库提供 JAR 文件。

谢谢你的帮助。

4

2 回答 2

6

我不想分发源代码,因为它包含有关发布到我的 Web 服务器的详细信息。

请记住,任何想要获取该数据的人都可以从 JAR 中获取这些数据。

这必须是可能的,因为其他公司为可以包含的库提供 JAR 文件。

AFAIK,这个食谱仍然有效:

  1. 使用您的源代码、资源等创建一个 Android 库项目,并使其正常工作

  2. 编译 Java 源代码(例如,通过 Ant)并将其转换为 JAR 文件

  3. 创建原始 Android 库项目的副本以用作分发 Android 库项目

  4. 将第 2 步中编译的 JAR 放入libs/第 3 步中的分发库项目中。

  5. 删除src/分发库项目中的所有内容(但将现在为空的src/目录保留在那里)

  6. 分发分发库项目(例如,将其压缩)

这有效地为您提供了您在 Play Services SDK 中看到的内容——一个没有源代码的库项目,而是一个 JAR inlibs/以及资源等。

明天我将重新确定这个食谱,如果我发现它需要针对当前的工具进行调整,我会尽量记住更新这个答案。

并且新的基于 Gradle 的构建系统支持用于分发库等的 AAR 包,尽管我还没有玩过这个。


更新

只要库项目本身不依赖于另一个 JAR 或库项目,这个秘籍就可以工作。在这些情况下,构建过程中的事情似乎变得一团糟——一切都可以编译,但依赖项中的类引用无法在运行时解析。

于 2013-07-12T19:50:04.000 回答
0

您是否尝试将 jar 文件放在 libs 文件夹中?如果您要为 android 导出 jar 库,请确保它没有/res文件夹。如您所知,您无法从 jar 中引用 res 文件夹,因此您必须使用库项目来引用您的 res 文件夹(drawable、xml 等...)另一方面,您无法使代码安全(该部分您说要发布到您的 Web 服务)通过将其用作 jar,因为它很容易通过逆向工程检索。你最好使用一些编码(比如base64或bouncycastle提供的任何算法)

于 2013-07-12T19:52:50.133 回答