我必须开发一个Android库,需要打包并分发给Android开发人员。它有 Java类和资源(图标等)。
我想知道分发这样一个库的最佳方式。众所周知,许多知名的库以不同的格式分发:
- ActionBAr Sherlock - ZIP或APKLIB
- Flurry - JAR
- 我不能分发源代码-只允许编译的java类和资源
- 我的目标是与客户端项目指令集成尽可能简单-例如,Maven/Gradle中的一行作为依赖项,几行代码如何在应用程序中使用它。 我必须尊重每一个构建系统:那些使用NBS的,那些使用android-maven-plugin的和那些使用传统ANT的。
我的第一个想法是将这个库作为APKLIB (Maven)和AAR (NBS)分发,但后来我意识到不支持ANT。
问题:
- APKLIB和AAR只编译类和资源,而不是普通的Java源?
- 如何为ANT分发编译的android库项目?作为ZIP?
- 如何为库生成R ?
谢谢你的建议!
-
APKLIB只应该包含源,库和资源,不编译的
.class
文件。作为补充,AAR格式是"Android库项目的二进制发行版",必须包含classes.jar
,但是不包含源代码。Edit:然而,有一个技巧,您可以使用APKLIB包含编译类而不是源代码:编译源代码并将其放在APKLIB中的libs/<library-name>.jar
而不是bin
目录中。然后用一些虚拟文件替换src
中的所有文件。 -
你可以为Ant发布一个编译好的Android Library Project作为AAR,但是在使用它的时候你必须记住一些事情。Ant显式地在提取的AAR文件中查找
src
目录,但是没有,Ant在bin
目录中查找classes.jar
,但是它位于提取的AAR文件的根目录。您可以通过创建一个空的src
目录并将classes.jar
复制到bin/classes.jar
来解决这个问题。这正是我们在检索AAR工件后在Ivypost-retrieve-artifact
步骤中所做的事情。Edit:这样做的缺点是ant clean
将删除bin/classes.jar
,您可能最好使用APKLIB和jar
打包为前面所述的libs
目录的一部分。 -
APKLIB和AAR都不应该附带编译的
R
类,它们都在res
目录中附带了原始资源。此外,AAR必须包含列出所有资源的R.txt
文件(作为aapt --output-text-symbols
的输出)。