AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

利用 Buck 进行高效 Android 编译

  • 2015-06-30
  • 本文字数:1410 字

    阅读完需:约 5 分钟

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 读者交流群)。

2015-06-30 03:3011811
用户头像

发布了 268 篇内容, 共 123.0 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

敏捷在医疗器械开发中的应用 —— Q&A

ShineScrum

【6.23-6.30】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

企业号 7 月 PK 榜,火热开启!

InfoQ写作社区官方

热门活动 企业号 7 月 PK 榜

强化学习从基础到进阶–案例与实践[11]:AlphaStar论文解读、监督学习、强化学习、模仿学习、多智能体学习、消融实验

汀丶人工智能

人工智能 深度学习 强化学习 7月日更

远程desk工具利用总结

快乐非自愿限量之名

远程 ToDesk

高并发场景下,6种解决SimpleDateFormat类的线程安全问题方法

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

打造数智物流底座,华为云DTSE助力物联云仓解锁物流新“速度”

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 6 月 PK 榜

在找稳定的企业级数据云平台?奇点云DataSimba R4.9 LTS发布

奇点云

产品升级 奇点云 数据基础设施 DataSimba

探索To-D,落地好大夫效能平台

方勇(gopher)

DevOps SRE 效能平台

强化学习从基础到进阶-案例与实践[4.2]:深度Q网络DQN-Cart pole游戏展示

汀丶人工智能

人工智能 深度学习 强化学习 DQN

万木健康:用AIGC创造医生的第25个小时|TE洞察

TE智库

人工智能 AIGC 医疗健康

毕业季 | 程序员初入职场必备软件开发神器

华为云开发者联盟

云计算 软件开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

人脸识别技术在智能家居中的应用

来自四九城儿

强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient策略梯度-Cart pole游戏展示

汀丶人工智能

人工智能 深度学习 强化学习 策略梯度

专访|严靖炜:从参与 MatrixOne 到论文入选 IEEE BMSB 2023

MatrixOrigin

数据库 云原生 超融合

人脸识别技术在社交媒体中的应用

来自四九城儿

金域医学2023“域见杯”医检人工智能开发者大赛正式启动

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

解放开发者——5个好用的低代码开发平台

树上有只程序猿

全面解析 | 大模型时代如何利用弹性计算服务应对大算力挑战

阿里云弹性计算

云计算 弹性计算 AIGC

🔥🔥🔥我可算把【年中复盘】玩明白了

禅道项目管理

总结 复盘

SQL 优化(三):使用覆盖索引

hungxy

基木鱼平台全链路升维,商家经营迎来AIGC生意经

Geek_2d6073

2023-06-30:给你一个 rows * cols 大小的矩形披萨和一个整数 k, 矩形包含两种字符: ‘A‘ (表示苹果)和 ‘.‘ (表示空白格子), 你需要切披萨 k-1 次,得到 k 块披

福大大架构师每日一题

Go 算法 rust Go 语言 福大大架构师每日一题

AI自动生成代码,是时候冷静下来思考如何保障代码安全了

华为云PaaS服务小智

云计算 华为云 代码检查 华为开发者大会 AI编程

使用 diffusers 训练你自己的 ControlNet 🧨

互联网工科生

controlnet

Java 网络编程 —— 客户端协议处理框架

快乐非自愿限量之名

Java url

什么是MES?国内做MES系统的企业哪家好?

优秀

MES系统 mes

迄今为止最完整的DDD实践

阿里技术

架构 DDD

利用Buck进行高效Android编译_移动_张天雷_InfoQ精选文章