【Android 构建新工具】Bazel 构建工具介绍

简介: Android开发我们主要用到的编译器是Java的Java编译器以及C/C++的gcc/clang编译器。对应Java层构建工具最初是Ant,后面Maven以及gradle;C/C++构建工具主要是make/cmake,做过系统开发或者chromeium,可能还用过ninjia、gclient、mm等。最近在编译Android平台的tensorflow lite库,发现官方使用的是Bazel构建工具,大概了解了下,它不仅可以构建Native层还可以构建Java层库。今天我们简单介绍下什么是Bazel,后续我们逐步深入了解Bazel构建工具,使用Bazel构建我们的Android项目。

image.png


Android开发我们主要用到的编译器是Java的Java编译器以及C/C++的gcc/clang编译器。对应Java层构建工具最初是Ant,后面Maven以及gradle;C/C++构建工具主要是make/cmake,做过系统开发或者chromeium,可能还用过ninjia、gclient、mm等。最近在编译Android平台的tensorflow lite库,发现官方使用的是Bazel构建工具,大概了解了下,它不仅可以构建Native层还可以构建Java层库。今天我们简单介绍下什么是Bazel,后续我们逐步深入了解Bazel构建工具,使用Bazel构建我们的Android项目。


Bazel概述


Bazel是一个开源的构建和测试工具,类似于Make、Maven和Gradle。它使用人类可读的高级构建语言。Bazel支持多种语言的项目,并为多种平台构建输出。Bazel支持跨多个存储库和大量用户的大型代码库。


为什么选择Bazel?


Bazel构建工具有以下优势:


  • 高级构建语言。Bazel使用一种抽象的、人类可读的语言来在高级语义级别描述项目的构建属性。与其他工具不同,Bazel操作的是库、二进制文件、脚本和数据集的概念,避免了编写对编译器和连接器等工具的单独调用的复杂性。
  • Bazel快速可靠。Bazel将缓存所有以前完成的编译结果,并跟踪对文件内容和构建命令的更改。这样,Bazel可以知道什么时候需要重建,而且只重建该处改动。还可以将项目设置为以高度并行和增量的方式进行构建以进一步加快构建速度。
  • Bazel是跨平台的。Bazel可以在Linux、macOS和Windows上运行。Bazel可以从同一个项目中为多个平台(包括桌面、服务器和移动)构建二进制文件和可执行文件。
  • Bazel是规模化的。Bazel在处理带有100k以上源文件的构建时保持了敏捷性。它可以与数以万计的多个存储库和用户群一起工作。
  • Bazel是可扩展的。它支持许多语言,您可以扩展Bazel以支持任何其他语言或框架。


Bazel使用教程


要使用Bazel构建或测试一个项目,我们需要怎么操作呢?通常需要做以下操作:


  1. 设置Bazel环境。下载并安装Bazel
  2. 设置工作空间,该目录是Bazel查找构建输入和build文件以及存储构建输出的目录。
  3. 编写一个BUILD文件,用以向Bazel描述要构建什么以及如何构建。
  4. 从命令行运行Bazel。


我们可以使用Starlark(一种特定于领域的语言)来声明构建目标,从而编写构建文件。


构建目标指定了一组Bazel将构建的输入构件以及它们的依赖项、Bazel将用于构建的构建规则,以及配置构建规则的选项。


构建规则指定Bazel将使用的构建工具,比如编译器和链接器,以及它们的配置。Bazel附带了许多构建规则,涵盖了受支持平台上受支持语言中最常见的工件类型。


除了构建之外,我们还可以使用Bazel运行测试和查询构建,以跟踪代码中的依赖项。


Bazel是如何工作的?


当我们运行构建或测试时,Bazel会做以下事情:


  1. 加载与目标相关的Build文件;
  2. 分析输入及其依赖关系,应用指定的构建规则,并生成动作图。
  3. 在输入上执行构建操作,直到生成最终的构建输出。


由于所有以前的构建工作都被缓存了,Bazel可以识别和重用缓存的工件,只重新构建或重新测试更改的内容。为了确保正确,我们可以设置Bazel以通过沙箱密封地运行构建和测试,最大限度地减少偏差和最大化复用性。


什么是动作图?


动作图表示构建工件、它们之间的关系以及Bazel将执行的构建操作。通过这个图,Bazel可以跟踪对文件内容的更改以及对操作(比如构建或测试命令)的更改,并知道之前已经完成了哪些构建工作。该图还使我们能够轻松地跟踪代码中的依赖项。

目录
相关文章
|
1月前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
2月前
|
存储 Java Android开发
探索安卓应用开发:构建你的第一个"Hello World"应用
【9月更文挑战第24天】在本文中,我们将踏上一段激动人心的旅程,深入安卓应用开发的奥秘。通过一个简单而经典的“Hello World”项目,我们将解锁安卓应用开发的基础概念和步骤。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供一次实操体验。从搭建开发环境到运行你的应用,每一步都清晰易懂,确保你能顺利地迈出安卓开发的第一步。让我们开始吧,探索如何将一行简单的代码转变为一个功能齐全的安卓应用!
|
3月前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
66 10
|
24天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
48 5
|
25天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
42 2
|
30天前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
1月前
|
人工智能 Android开发
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
61 1
|
1月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
46 4
|
1月前
|
编解码 Android开发 UED
构建高效Android应用:从内存优化到用户体验
【10月更文挑战第11天】本文探讨了如何通过内存优化和用户体验改进来构建高效的Android应用。介绍了使用弱引用来减少内存占用、懒加载资源以降低启动时内存消耗、利用Kotlin协程进行异步处理以保持UI流畅,以及采用响应式设计适配不同屏幕尺寸等具体技术手段。
49 2
|
2月前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
61 5