将资源作为库项目编译的类



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

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

  • ActionBAr Sherlock - ZIP或APKLIB
  • Flurry - JAR
我的先决条件:

  1. 我不能分发源代码-只允许编译的java类和资源
  2. 我的目标是与客户端项目指令集成尽可能简单-例如,Maven/Gradle中的一行作为依赖项,几行代码如何在应用程序中使用它。
  3. 我必须尊重每一个构建系统:那些使用NBS的,那些使用android-maven-plugin的和那些使用传统ANT的。

我的第一个想法是将这个库作为APKLIB (Maven)和AAR (NBS)分发,但后来我意识到不支持ANT。

问题:

  1. APKLIB和AAR只编译类和资源,而不是普通的Java源?
  2. 如何为ANT分发编译的android库项目?作为ZIP?
  3. 如何为库生成R ?

谢谢你的建议!

  1. APKLIB只应该包含源,库和资源,编译的.class文件。作为补充,AAR格式是"Android库项目的二进制发行版",必须包含classes.jar,但是不包含源代码。Edit:然而,有一个技巧,您可以使用APKLIB包含编译类而不是源代码:编译源代码并将其放在APKLIB中的libs/<library-name>.jar而不是bin目录中。然后用一些虚拟文件替换src中的所有文件。

  2. 你可以为Ant发布一个编译好的Android Library Project作为AAR,但是在使用它的时候你必须记住一些事情。Ant显式地在提取的AAR文件中查找src目录,但是没有,Ant在bin目录中查找classes.jar,但是它位于提取的AAR文件的根目录。您可以通过创建一个空的src目录并将classes.jar复制到bin/classes.jar来解决这个问题。这正是我们在检索AAR工件后在Ivy post-retrieve-artifact步骤中所做的事情。Edit:这样做的缺点是ant clean将删除bin/classes.jar,您可能最好使用APKLIB和jar打包为前面所述的libs目录的一部分。

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

相关内容

  • 没有找到相关文章

最新更新