shi*_*hen 12 android gradle android-testing android-gradle-plugin bazel
我正在阅读有关Android Testing Samples项目的文章,并注意到一个名为Bazel的" 新 "构建工具正用于构建Android项目:
实验性Bazel支持
其中一些示例可以在Linux上使用Bazel构建.这些示例包含一个
BUILD.bazel
文件,类似于build.gradle
文件.外部依赖项在顶级WORKSPACE文件中定义.这是实验性功能.要运行测试,请按照Bazel网站上的说明安装最新版本的Bazel(0.12.0或更高版本).
然后,
更新#1:更新了farhana的接受答案,感谢Jin提供有关google构建系统的详细信息.
更新#2:更新了谷歌代码实验室,用于bazel android介绍.
Far*_*ana 10
Bazel是内部Google构建系统Blaze的子集.因此,Bazel已经发展到解决了一个非常大的问题,这个问题在某种程度上(但可能并非完全)是Google特有的:
Bazel构建文件
Bazel使用两个配置文件:BUILD
和WORKSPACE
存在一个BUILD文件告诉Bazel它正在查看一个代码包 - 这个代码包包含当前目录及其中的所有子目录,除非该子目录包含一个构建文件.
WORKSPACE文件是用BUILD语言编写的,和BUILD文件一样,包中只能有一个WORKSPACE.WORKSPACE文件的目的是跟踪项目的外部依赖项.每个外部依赖项都使用规则添加到WORKSPACE - 以下是一个示例:
Gradle构建文件
Gradle构建系统使用多个文件:build.gradle,settings.gradle和gradlew.而不是像Bazel那样以脚本序列运行每个构建步骤,Gradle使用Groovy处理构建步骤配置,Groovy是一种与Java相关的面向对象语言.
build.gradle文件定义构建的配置和执行阶段,将两个使用对象分开.脚本的执行顺序定义如下:
Bazel所做的事情包括:
比特再现性.这是优秀的.
与技术无关的内部包构建.你有一些依赖于某些C代码的python吗?有些Java需要javascript作为前端吗?Bazel可以做到这一点,它是少数可以开源的构建系统之一.
通过其可重复性,Bazel可以缓存构建结果并仅重建其所需的内容.这使得它很快.
Bazel很灵活.它有自己的域语言,因此您可以扩展它以支持您需要构建的任何内容,无论创建者是否听说过它.想要"构建"(语法检查和测试)Javascript?Java?C?C++?目标C?Fortran语言?Brainfuck?没问题.如果尚未实现,则可以实现它.如果你不喜欢它的工作方式,你可以自己编写.想使用自定义编译器吗?自定义静态检查器?自定义测试工具?没问题.世界是你的牡蛎.
关于bazel不好
Bazel不是真正的依赖管理.它管理您的依赖项是什么,但不管理要使用的版本.如果您将整个依赖关系树中的所有内容都检入一个巨大的整体代码存储库(就像Google使用perforce的分支一样),那就没问题了."google方式"是指始终一直在构建所有内容,而不是依赖于旧版本.
结论:
这两种构建格式之间存在类似的功能级别,很明显这两种系统都是用不同的理念构建的.Bazel提供了一个易于推理的结构化系统,为大型和不断发展的产品提供了强大的功能基础.另一方面,Gradle提供了一个灵活,有状态,面向对象的界面,对于那些不经常使用脚本语言的人来说,这种界面可能会让人感到熟悉.
有关更多参考:
我是该存储库中Bazel支持的作者,并且在Bazel Android规则团队中工作。farhana已经写了一个了不起的答案,但我只想补充几点:
mobile-install
,可用于快速迭代地开发Android应用程序。它会构建您的应用程序,分片本机库,dexes和资源文件,并且仅将更改的分片推送到设备以减少构建和部署时间。在此处了解更多信息。拥有两个Android版构建工具真的很好吗?
不仅仅是两个:Buck&Pants是另外两个流行的Android构建系统。每个构建系统都有其优点和缺点,并且被设计和实现为解决一组特定的需求。例如,Bazel(及其周围的工具生态系统)诞生于Google巨大的monorepo,因此它确实很好地解决了可伸缩性问题。
IMO可以选择尝试不同的方法是一件好事。
这是否意味着Android开发人员将来可能需要学习这种新的构建工具?
Bazel是开源的,并通过Bazel插件在Android Studio中提供支持。如果您觉得它有趣,请随时尝试!我们仍处于适应Android规则以在开放源代码世界中工作的早期阶段,因此希望某些功能目前仍在开发中。
归档时间: |
|
查看次数: |
2220 次 |
最近记录: |