微信号:infoqchina

介绍:有内容的技术社区媒体

实现Android CI

2013-08-16 16:04 InfoQ

CI在web-based application上已经有了非常成熟的实现,由此也积累了大量的优秀实践。但这些实践在Android平台中是否适用? 已知的CI工具是否能够很好的支持Android? Android CI是否也能即时的反馈Android Application的健康状况? 这篇文章中将通过实践,向大家展示Android CI可用的实现方法,是时候为我们的Android App搭建CI了。


一、Android CI带来了什么?


1) App质量的提升


事实上CI并不能直接提高App的质量,但是CI提供了对App的监测和反馈,通过持续的检测和反馈,可以完成对App的持续改进。


在CI的Compilation阶段,若出现编译失败频率较高,一是因为代码未按照原子提交的原则进行,二是本地开发环境不干净,存在与CI环境不一致的地方,导致每次提交时不能提交所有文件,总是需要手动挑选提交文件。


在CI的Testing阶段,若出现失败,很有可能说明此次提交已经破坏了与之相关联的功能或者模块。App通过Testing,就是App可用性的一种反馈。


CI的Inspection阶段会对代码做多方面的考察,如Checkstyle,单元测试覆盖率,代码静态bug分析等,这些都是对代码质量的检测,通过这些改善检测结果,代码质量也就会随之得到提高。


CI将各环节的结果反馈给整个团队,团队为改善这些结果付出努力后,App的质量自然也就得到了提升。这也就是为什么反馈环节在CI是如此的重要,以至于失去它,CI无法发挥任何作用。


2)风险降低


CI将项目当前的健康状况即时的通报给整个团队,使得项目状况变得十分透明。团队成员在获得CI的反馈后,会关心项目的健康状况,逐步的团队所有人都习惯为App质量承担起自己的责任。


Bug的出现总是不可避免的,那就希望这些bug尽早的出现。持续的进行Testing可以让bug尽可能早的被发现。同时很快就能定位bug引入时间,并解决它。在发布前夕,发现App竟然存在部署问题,这一定会让大家变得紧张起来。持续的进行Deploy,可以让这些问题尽早的暴露出来并解决。


3)重复步骤减少


为了得到一个可发布的Android App,需要经历编译,测试,验证,部署等众多步骤。为了节约出包的时间,减少对资源的消耗,保证步骤都被正确执行。CI可以帮组构建一个可以重复执行的出包流程,并通过不断的优化,缩短时间。这样一个确定的出包步骤能够让开发人员在本地环境快速的完成部署。


4)对产品的信心增强


项目在一个透明的环境中运行着,团队成员都关注这App质量,努力改善项目健康状况。这样一个齐心协力的团队状态,相信整个团队对于项目的信心也会随之增加。


二、Android CI面临的困难


Android环境存在不稳定。Android的模拟器在虚拟机中存在不能稳定运行的状况。


自动化框架不够成熟。尤其是自动化测试。


无法完成自动化部署。


Android设备中有些性能较低。需要在这些设备上运行Function Test时资源紧缺就更加明显。


Android正在快速发展,带来了多个差异较大版本。那CI就应该对这些版本都能够兼容。


三、一步步实现Android CI


Android上的CI构建链与其它平台一致,依然包含Compilation, Testing, Inspection, Deploying阶段,每一个阶段的Feedback的都保持对整个团队透明。


CI中各个步骤执行先后顺序的安排,应该是执行时间较短的优先执行。执行时间短的一般在提交代码前就可执行,错误率也比较低,就应该尽可能先执行。这样失败会来得更早一些,每一次CI运行失败前验证完毕的东西更多。上图中CI的工作流,正是在这样的一个原则的基础上形成的。


环境准备


* 在CI服务器上安装Java和Android运行环境


* 安装构建工具,本文采用Ant进行实践


* 搭建好CI服务。本文采用开源的CI服务Jenkins(Hudson)。


* Jenkins在功能上完全能够满足功能上的需要,且简单易用。


* 安装Ruby环境。本文中使用的Functional Test测试工具是基于Ruby实现的。


步骤 1:持续构建


步骤 2:持续测试


步骤 3:持续检查


步骤 4:持续部署


步骤 5:持续反馈


……


更多请阅读全文


作者简介


朱傲,北京交通大学硕士,现为Thoughtworks咨询师。关注软件质量、移动开发、知识管理等领域,喜欢技术写作及分享。


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 NGINX如何实现高性能和可扩展性 内容回顾 【视频】测试同学要不要学习写代码 感恩节专题——传智学子成功之路“背后的女人” Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法