当前位置: 首页 > 知识库问答 >
问题:

使用Bazel比使用Gradle增加的优势是什么?[关闭]

谭成业
2023-03-14

我在阅读Android测试示例项目时注意到一个名为Bazel的“新”构建工具正在用于构建Android项目:

其中一些示例可以在Linux上使用Bazel构建。这些示例包含一个build.bazel文件,该文件与build.gradle文件类似。外部依赖关系在顶级工作区文件中定义

这是实验特征。要运行测试,请按照Bazel网站上的说明安装Bazel的最新版本(0.12.0或更高版本)。

那么,

  • 与现有Gradle相比,使用Bazel的额外优势是什么?
  • 有两个Android构建工具真的好吗?
  • 这是否意味着Android开发人员将来可能需要学习这个新的构建工具?

更新#1:更新了farhana接受的答案,感谢Jin提供的关于google build系统的深入细节。

更新#2:更新了谷歌代码实验室的bazel android介绍。

共有1个答案

薛望
2023-03-14

Bazel是谷歌内部构建系统Blaze的一个子集。因此,Bazel的发展是为了解决一个很大的问题,这个问题在某种程度上(但也许并不完全)是Google独有的:

  • Bazel配置文件比Gradle的结构化得多,使Bazel能够准确地理解每个操作的操作。这允许更多的并行性和更好的重复性。

Bazel生成文件

Bazel使用两个配置文件进行操作:buildworkspace

构建文件的存在告诉Bazel它正在查看一个代码包--这个代码包包括当前目录和其中的任何子目录,除非子目录包含构建文件。

工作区文件是用构建语言编写的,与构建文件一样,一个包中只能有一个工作区。工作区文件的目的是跟踪项目的外部依赖关系。使用规则将每个外部依赖项添加到工作区--以下是一个示例:

分级生成文件

Gradle构建系统使用几个文件:build.Gradle、settings.Gradle和gradlew。Gradle不像Bazel那样按脚本顺序运行每个构建步骤,而是使用Groovy(一种与Java相关的面向对象语言)处理构建步骤配置。

build.gradle文件定义了构建的配置和执行阶段,将这两个使用对象分开。脚本的执行顺序定义如下:

巴泽尔做得很好的事情包括:

>

  • 比特用于比特重复性。这太棒了。

    与技术无关的包内构建。你有依赖于C代码的python吗?一些前端需要javascript的Java?Bazel可以做到这一点,它是少数几个可以做到的开源构建系统之一。

    通过它的可复制性,Bazel可以缓存构建结果,并且只重建它所需要的。这让它很快。

    巴泽尔很灵活。它有自己的领域语言,所以您可以扩展它来支持您需要构建的任何东西,无论创建者是否听说过。想要“构建”(语法检查和测试)JavaScript?Java?C?C++?目标C?FORTRAN?脑残?没问题.如果它还没有实现,您可以实现它。如果你不喜欢它的工作方式,你可以自己写。想要使用自定义编译器吗?自定义静态检查器?一个定制的测试工具?没问题.世界是你的牡蛎。

    巴泽尔不好

    这两种构建格式之间具有相似的功能级别,很明显,这两个系统采用了不同的理念。Bazel提供了一个易于推理的结构化系统,并为大型和不断增长的产品提供了强大的功能基础。另一方面,Gradle提供了一个灵活的、有状态的、面向对象的接口,对于那些不经常使用脚本语言的人来说可能会感到熟悉。

    有关更多参考资料:

    • Gradle团队对巴泽尔的看法
    • bazel和gradle生成之间的差异
    • 什么是android Studio中的gradle

  •  类似资料:
    • 本文向大家介绍使用vuex的优势是什么?相关面试题,主要包含被问及使用vuex的优势是什么?时的应答技巧和注意事项,需要的朋友参考一下 其实vuex中的所有功能都能够通过其他的方式进行实现,只不过vuex对这些方法进行了整合处理,使用起来更加便捷,同时也便于维护。全局状态变量的统一管理,有这么个中介你找不找他呢?

    • 出于好奇,如果在java8样式中使用Comparator,即使用Lambda表达式比常规比较有任何优势,即。 一种按id排序的方法是:- 其他方法可以是Java 8 way:- 与前一种方法相比,后一种方法(< code>java-8方法参考)是否有性能优势? 请帮忙!!!

    • 问题内容: 有人可以告诉我为什么对node.js如此大惊小怪吗?与用php框架编写的常规网站相比,用node.js编写的常规网站(比如博客)是否更快?我知道用node.js编写的Web服务器将比apache快,但是不创建线程或类似对象的真实Web应用程序呢? 问题答案: 编辑: 有两个主要优点: 速度!(性能) Node.js是事件驱动和非阻塞的,并且非常擅长处理并发请求。 这是指向 Apache

    • 问题内容: 用…实现事情 似乎 已经 很简单 了… 与 ngResource相比 ,使用Restangular 有哪些优点/缺点? 1.1.3 将返回承诺,并且可以使用[最新的PRcommit来实现。将来会提供支持来支持Restangular所做的其他动词吗?如果发生这种情况,Restangular似乎将消失并变得不耐烦。 问题答案: 我是Restangular的创建者。 我已经在自述文件中创建了

    • 本文向大家介绍使用 Spring Cloud 有什么优势?相关面试题,主要包含被问及使用 Spring Cloud 有什么优势?时的应答技巧和注意事项,需要的朋友参考一下 使用 Spring Boot 开发分布式微服务时,我们面临以下问题 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。 服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目

    • 我想每秒运行一个函数60次。我更喜欢使用Util定时器,我认为这是一个非常简单的方法 但是我看到很多人使用游戏循环,它们更长更复杂。 抱歉,因为我并不真正理解gameloops,除了跟踪fps之外,使用它们还有什么好处吗?