BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

利用Buck进行高效Android编译

| 作者 张天雷 关注 4 他的粉丝 发布于 2015年6月30日. 估计阅读时间: 4 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

Buck是Facebook出品的高效开源Android编译工具,旨在鼓励开发者构建小规模可重用的程序模块,2013年发布时,InfoQ对此有过非常详细的报道。 随着版本的不断迭代和功能的不断演进,越来越多的团队开始利用Buck改进编译过程,Vine就是其中之一,该团队近期在博客中分享了Buck使用的经验。

相比传统的Android编译工具,Buck凭借多核及并行技术,极大加速了Android工程的编译速度。同时,多次编译过程中,它会对未变动的模块进行标记,以增量式编译的方式进一步提高速度。Buck自带编译脚本生成功能,并提供编译过程中单元测试的代码覆盖率等数据表单,还为无法用Ant工具编译的模块提供了便捷的编译方式。Buck跟IntelliJ结合紧密,可通过简单的编译脚本生成该IDE可用的工程,极大降低了本地IDE开发后向服务器迁移的成本。

Vine团队首先介绍了开发环境,包括Android Studio、Gradle编译系统、Crashlytics等第三方插件以及Jenkins持续集成工具。在开发过程中,Vine发现虽然Gradle编译系统支持多平台配置,但是Vine的Android版本开发过程中会遇到两个问题,一是App的体积会持续不断地增长,二是随着越来越多编译步骤的增加,编译时间越来越长。在引入Buck前,这两个问题越来越严重,一次完整编译要花费5分钟左右时间,而哪怕修改一行代码的编译都需要1分钟。对于Vine这样的小型团队来讲,每天都要花费几个小时在等待编译完成,这让他们非常纠结。通过对过程的观察,Vine发现dex文件合并以及通过USB安装App的时间占去了整个的90%,因此决定以此作为突破口,这时他们发现了来自Facebook的Buck很精准地提供了这方面的优化,能够通过ExoPackage模式来缩短编译时间。Buck在这方面有很多的优化,如最小编译依赖、最小dex传输等。具体来讲,Buck引入了三个基本的概念,藉此完成高效编译。编译规则(rule),规定Buck在给定输入文件后生成输出文件的过程。编译目标(target),项目中用来指定采用哪个规则编译的字符串。编译文件(file),可包含多个编译规则,可类比为Make技术中的Makefile。在上述三个概念的基础上,Buck会根据file中给定的target寻找特定编译规则集合,然后根据每个规则来对Android工程进行编译。这种分布式编译的方式,在Buck内部以依赖图的形式表示,它能够使得相互之间没有依赖关系的模块并行编译,节约编译时间,并且通过对未改动模块的标记,还可以进一步加速。

最后Vine团队用了三个工作日来将编译环境迁移至Buck,其中包含将远程jar全部放置本地,运行时修改R值,创建混合AndroidManifest.xml文件和创建Buck配置文件等。此时一次完整编译的时间已降低至40秒钟,而且本次迁移并未破坏和影响Gradle原本的优势,有了这样的成功,Vine团队打算下一步将Buck和Gradle之间的同步更加自动化。

总而言之,Buck面向的使用者是那些需要从单一代码库编译多个不同target的人,适合进行多平台开发的团队。值得注意的是,目前Buck不支持Window平台,因此只能通过Mac或Linux平台进行开发。对Buck安装、快速入门、以及编译过程感兴趣的读者可参考Buck官方给出的教程


感谢徐川对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT