为Android库分发创建JAR

时间:2013-07-12 19:43:25

标签: android

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

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

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

  

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

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

  

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

AFAIK,这个配方仍然有效:

  1. 创建一个包含源代码,资源等的Android库项目,并使其正常运行

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

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

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

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

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

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

    我将在明天重新开始这个食谱,如果我发现它需要调整当前的工具,我会尽量记住更新这个答案。

    新的基于Gradle的构建系统支持用于分发库等的AAR包,尽管我还没有使用它。


    <强>更新

    只要库项目本身不依赖于另一个JAR或库项目,此配方就可以工作。在这些情况下,事情似乎在构建过程中搞砸了 - 一切都可以编译,但依赖项中的类引用无法在运行时解析。

答案 1 :(得分:0)

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