一直觉得打包,UI 自动化 写出来技术含量不高,没啥创新,都没有动力写下去了。但是承诺了将这一系列写完,我还是会坚持的。也许是我浅尝辄止,权且当在这里抛砖引玉吧。

  1. 工具选择
  2. 打包过程
  3. 持续集成
  4. 思考与讨论

工具选择


在一般的 Android 开发中,我们通常使用 Eclipse 自带的导出工具来进行 App 的签名和发布,Android 自动化打包,就是利用脚本将这样一个手动操作的过程转化为一个命令搞定。
在工具选择上,我尝试过 Maven, gradle,都遇到过很多坑。最终选择了最简单,最原始的工具 Ant。这也符合我一惯 “简单至上” 的原则。

打包过程


Ant 打包主要是 3 条命令。
android update project -p . -t android-19
ant clean
然后 ant debug

是不是很简单?
准备
需要配置好 JDK、Android SDK 和 Ant 的环境
步骤

  1. 准备好项目的源码和依赖库源码,最好放在同一级目录下,确保源码和依赖库可在 IDE 中编译成功,这样就无需调整 project.properties 文件中依赖库的相对位置了。
  2. 打开 CMD 命令行,进入到依赖库源码目录,执行 android update lib-project -p . -t android-19,这个命令的作用是在依赖库下生成自动打包相关的文件,-p .的意思是在当前根目录下执行,-t android-17 的意思是此源码使用 android-19 api 进行编译,各位根据自己的项目情况自行修改,所有的依赖库都要执行这一步操作。
  3. 打开 CMD 命令行,进入到源码根目录,执行 android update project -p . -t android-19,这个命令的作用是在源码下生成自动打包相关的文件。
  4. 打开 CMD 命令行,进入到源码根目录,执行 ant clean,然后 ant debug,如果打包成功,可以在源代码的 bin 目录下看到未签名的 apk 文件。
  5. 想要生成签名文件,需要在源码根目录下建立 ant.properties 文件,内容如下:
#包名  
application.package=com.nomouse  
#项目名缺省时源码文件名  
ant.project.name=  
#编码方式  
java.encoding=utf-8  
#编译输出绝对路径  
out.absolute.dir=d:/out  
#生成文件绝对路径  
gos.path=d:/out  
#签名key文件绝对路径  
key.store=D:/adt-bundle/Nomouse  
#签名文件密码  
key.store.password=password  
#签名别称中文的话需要转成utf-8编码可以使用JDK自带的native2ascii工具  
key.alias=\u4f01\u4e1a  
#签名别称密码  
key.alias.password=password  

6.打开 CMD 命令行,进入到源码根目录,执行 ant release,成功的话可以在 d:/out 目录下看到输出的 App 签名文件。

这个的过程主要是还要打依赖的包。如果你不清楚,可以找开发问问。
这是我最开始用 BAT 写的:

@echo on
set logdir=%~dp0
set buildpath=%logdir%library
set trunkpath=%logdir%trunk/Circle
if exist 1.txt (
del /q /s 1.txt
)
if exist 2.txt (
del /q /s 2.txt
)
cd %buildpath%
dir *.* /a /b > %logdir%/1.txt

@for /f "tokens=1,2 delims=-" %%a in (%logdir%/1.txt) do echo %%a >> %logdir%/2.txt
cd %logdir%
@for /f "tokens=1,2 delims= " %%a in (%logdir%/2.txt) do (
cd %buildpath%\%%a-library
android update project -n %%a -p . -t android-19
ant clean
ant debug
cd %buildpath%
)

后面为了通用性和跨平台,改成 python 的了,而且让他发送到远程路径中去。
结果是这样子的。

持续集成


持续集成也很简单,这里只对邮件格式一个展示。(这里用的是 SVN,用 git 的可以相应修改,自己也可以修改邮件内容)

$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:

Check console output at $BUILD_URL to view the results.

 <hr/>

(本邮件是程序自动下发的请勿回复)<br/><hr/>


项目名称:$PROJECT_NAME<br/><hr/>

构建编号:$BUILD_NUMBER<br/><hr/>

svn版本号:${SVN_REVISION}<br/><hr/>

构建状态:$BUILD_STATUS<br/><hr/>

触发原因:${CAUSE}<br/><hr/>

构建日志地址<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>

构建地址<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>

变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>

(APK地址\\10.21.101.100\build\android)<br/><hr/>

如有问题请联系 糖果<br/><hr/>

设置一个触发条件,就完成了 Daily Build.

So easy!

思考与讨论


这个只是初步完成了一个打包过程。
远期打算加入自动安装功能(可以设置安装与不安装,毕竟有时候要安装测试)
引入单元测试。
我用最简单的方法完成了 Anddroid Daily Buid,你们是如何做的呢?


↙↙↙阅读原文可查看相关链接,并与作者交流