使用资源作为库项目编译的类?

时间:2013-06-11 13:27:57

标签: android android-build android-maven-plugin

我必须开发一个需要打包并分发给Android开发人员的Android库。它有两个 Java类和资源(图标等)。

我想知道分发这样一个图书馆的最佳方式。众所周知,许多着名的图书馆以不同的格式分发:

  • ActionBAr Sherlock - ZIP或APKLIB
  • Flurry - JAR

我的先决条件:

  1. 我无法分发源 - 只允许编译的java类和资源
  2. 我的目标是尽可能简单地与客户项目指令集成 - 例如Maven / Gradle中的一行作为依赖项,几行代码如何在应用程序中使用它。
  3. 我必须尊重每个构建系统:使用NBS的那些,使用android-maven-plugin的那些以及使用传统ANT的那些。
  4. 我的第一个想法是将此库分发为APKLIB(Maven)和AAR(NBS),但后来我意识到不支持ANT。

    问题:

    1. APKLIB和AAR只能编译类和资源而不是普通的Java源吗?
    2. 如何为ANT分发已编译的android库项目?作为ZIP?
    3. 为库生成R怎么样?
    4. 感谢您的任何建议!

1 个答案:

答案 0 :(得分:2)

  1. APKLIB只应包含源,库和资源,编译的.class文件。补充一点,AAR format是“Android库项目的二进制分发版”,必须包含classes.jar,但没有来源。 编辑但是,有一个技巧可以用于APKLIB包含已编译的类而不是源代码:编译源代码并将其放在APK libs/<library-name>.jar内而不是bin目录。然后使用一些虚拟文件替换src中的所有文件。

  2. 您可以为Ant分发已编译的Android库项目作为AAR,但在使用它时必须记住一些事项。 Ant显式查找提取的AAR文件中的src目录,但没有,Ant在classes.jar目录中查找bin,但它位于提取的根目录下AAR文件。您可以通过创建一个空的src目录并将classes.jar复制到bin/classes.jar来解决此问题。这正是我们在检索AAR工件后在常春藤post-retrieve-artifact步骤中所做的事情。 修改这样做的一个缺点是ant clean会删除bin/classes.jar,而你最好使用一个jar打包的APKLIB作为如上所述的libs目录。

  3. APKLIB和AAR都不应该带有编译的R类,它们都带有res目录中的原始资源。此外,AAR必须包含列出所有资源的R.txt文件(由aapt --output-text-symbols输出)。