Facebook 推出了一个 Android 构建工具——Buck。该工具能够将 Android 项目的代码和资源有机的结合起来, 构建出简洁的,高可重用性的功能模块。
Buck 的特色:
Buck 能够帮助开发人员达成以下目标:
•加速 Android 构架过程。Buck 能够充分利用多核 CPU,以并行的方式构建项目工程。另外,Buck 还能自动追踪项目构建过程,判断哪些部分在构建时没有发生改变,从而避免重复构建,进而降低构建所需要的时间。
•引入了 ad-hoc 构建步骤,这一特性是目前 Android 采用的标准 Ant 脚本构建不支持的。
•采用了构架规则的思想,通过在构建系统中创建不同的构建规则来进行构建工作,而不是需要一个单独的系统来产生 build 文件。
•为单元测试创建“代码测试覆盖标尺”。
•能够根据构建规则,自动生成 IntelliJ 项目。该特性让 Buck 不但在自动的持续集成框架中成为理想的构建工具,同时也是 IDE 集成开发环境的最佳构建选择。
•能够维护你的构建依赖项。
•能够帮助开发者明了 APK 构建过程中的原理和细节。
构建速度的提升无疑是 Buck 最主要的优势。在 Facebook 方面,项目组采用 Buck 进行构建,其速度比采用 Ant 脚本进行构建快两倍。目前 Facebook 仍在努力让 Buck 的速度进一步提高。
Buck 的工作原理:
在 Buck 中,有三个主要的概念
•构建规则:构建规则是指从输入文件产生输出文件的过程
•构建目标:构建目标是构建规则的一个字符串形式的标识符。它可以被认为是在使用 Buck 构建的项目中的”URI”.
•构建文件:构建文件定义了一个或者多个构建规则。在 Make 阶段,就相当于是 Makefile, 只不过在 Buck 里,这些文件以 BUCK 命名。一个使用 Buck 进行构建的项目中,应该有很多 BUCK 文件。
每个构建规则都能产生 0 到多个与其相关的依赖项(简称为 deps). 这些依赖项会形成一张有向图,Buck 要求该图没有环装结构。
当使用构建规则构建输出文件时,所有的构建规则所关联的依赖项会首先被编译。这也就意味着上面提到的图结构会“从底向上”进行构建。构建规则只关心某个元素依赖谁,而不关心谁依赖这个元素。这种方式也正是采用有向图数据结构的原因。该数据结构能够让 Buck 有效地辨认出依赖子图,并采用并行的方式进行构建,同时也能判定出哪些资源需要构建,哪些已经构建过了,不需要再次构建,从而找出最小构建集,提高构建效率。
Buck 对我有用么?
Buck 的设计初衷是为了在单一代码库的基础上提供多点交付功能(而不是多代码库多点交付)。根据 Facebook 的项目经验,使用单一代码库会让依赖项的管理容易很多,这样项目的所有开发者就能保证共享统一而正确的依赖库,并且原子提交的过程也可以做到简化。
如果你要构建多个应用程序,抑或你要用多个应用样例来开发一个应用成品,那么 Buck 就绝对适合你。通过查看 Quick Start,你就能了解 Buck 如何帮助你组织你的 Android 项目,以及如何以更快的速度构建你的 Android 项目!