Android之Android.bp文件格式语法(一百八十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:Android之Android.bp文件格语法。

2.Android.bp介绍

  • Android.bp(Build Configuration File)是Android编译系统中的一种配置文件格式,用于定义模块(Module)及其依赖关系,以及模块的构建配置选项。Android.bp文件是Android编译系统中的核心部分,它替代了之前的Android.mk文件,提供了更加灵活和高效的模块管理方式。
  • Android.bp文件的基本结构如下:
  • 注释:以“//”开头的单行注释,用于说明和描述模块的属性和配置。
  • 包名(Package):模块所属的包名,用于唯一标识一个模块。包名通常包含公司或组织域名的反向拼写,例如:com.example.module。
  • 模块名(Module):模块的名称,用于在包内唯一标识一个模块。模块名通常为小写字母和下划线的组合,例如:my_module。
  • 依赖(Dependencies):模块依赖的其他模块,用于指定模块间的依赖关系。依赖可以分为两种类型:硬件依赖(hard)和软件依赖(soft)。硬件依赖表示模块需要特定硬件才能正常运行,而软件依赖表示模块可以运行在任意硬件上。
  • 特性(Features):模块提供的特性,用于描述模块的功能和特性。特性可以包含多个键值对,例如:features { hardware = “x86”; system-image = “api-level-29”; }上述代码表示该模块支持x86架构,并使用api-level-29的系统镜像。
  • 编译配置(Compile Configuration):模块的编译配置选项,用于指定编译时使用的工具链、编译器选项等。编译配置可以包含多个键值对,例如:cflags += “-Wall -Wextra”; include-dirs += “src/main/cpp”;上述代码表示在编译模块时添加了额外的编译警告,并包含了src/main/cpp目录下的头文件。
  • 源文件(Srcs and Headers):模块的源文件和头文件列表,用于指定模块的编译输入。可以指定单个文件或使用通配符匹配多个文件,例如:srcs = [“main.cpp”, “src/main/cpp/my_file.cpp”]; headers = [“include/my_module.h”];上述代码表示模块的主要源文件为main.cpp和src/main/cpp/my_file.cpp,头文件为include/my_module.h。
  • 编译规则(Compilation Rules):模块的编译规则,用于指定如何编译模块的源文件。编译规则可以包含多个键值对,例如:clang++ { target-os = [“android”, “linux”]; target-arch = [“x86”, “arm64-v8a”]; }上述代码表示模块支持Android和Linux操作系统,以及x86和arm64-v8a架构。
  • 生成文件(Generated Files):模块编译过程中生成的文件,用于指定编译输出。可以指定单个文件或使用通配符匹配多个文件,例如:generated-sources = “src/main/cpp/MyGenerator.java”;上述代码表示编译过程中生成的Java源文件为src/main/cpp/MyGenerator.java。
  • Android.bp文件通过描述模块的依赖关系、特性、编译配置等信息,为Android编译系统提供了更加灵活和高效的模块管理方式。使用Android.bp文件可以简化模块的编译过程,提高编译速度,并减少出错率。随着Android编译系统的不断演进,Android.bp文件格式也将不断完善和优化,以满足日益复杂的Android应用和系统构建需求。

3.Android.bp文件格式模块

Android.bp 文件很简单。它们不包含任何条件语句,也不包含控制流语句;
所有复杂问题都由用 Go 编写的构建逻辑处理。
Android.bp 文件的语法和语义都尽可能与 Bazel BUILD 文件类似。

<1>.模块

Android.bp 文件中的模块以模块类型开头,后跟一组 name: “value”, 格式的属性:

cc_binary {name: "gzip",srcs: ["src/test/minigzip.c"],shared_libs: ["libz"],stl: "none",
}

每个模块都必须具有 name 属性,并且相应值在所有 name 文件中必须是唯一的,仅有两个例外情况是命名空间和预构建模块中的 Android.bp 属性值,这两个值可能会重复。

srcs 属性以字符串列表的形式指定用于构建模块的源文件。您可以使用模块引用语法 “:” 来引用生成源文件的其他模块的输出,如 genrule 或 filegroup。

<2>.类型

变量和属性是强类型,变量根据第一项赋值动态变化,属性由模块类型静态设置。支持的类型为:布尔值(true 或 false)
整数 (int)
字符串 ("string")
字符串列表 (["string1", "string2"])
映射 ({key1: "value1", key2: ["value2"]})
映射可以包含任何类型的值,包括嵌套映射。列表和映射可能在最后一个值后面有终止逗号。

<3>.Glob

接受文件列表的属性(例如 srcs)也可以采用 glob 模式。
glob 模式可以包含普通的 UNIX 通配符 *,例如 *.java。glob 模式还可以包含单个 ** 通配符作为路径元素,与零个或多个路径元素匹配。
例如,java/**/*.java 同时匹配 java/Main.java 和 java/com/android/Main.java 模式。

<4>.变量

Android.bp 文件可能包含顶级变量赋值:

gzip_srcs = ["src/test/minigzip.c"],
cc_binary {name: "gzip",srcs: gzip_srcs,shared_libs: ["libz"],stl: "none",
}

变量的作用域限定在声明它们的文件的其余部分,以及所有子 Blueprint 文件。变量是不可变的,但有一个例外情况:可以使用 += 赋值将变量附加到别处,但只能在引用它们之前附加。

<5>.注释

Android.bp 文件可以包含 C 样式的多行 /* */ 注释以及 C++ 样式的单行 // 注释。

<6>.运算符

可以使用 + 运算符附加字符串、字符串列表和映射。
可以使用 + 运算符对整数求和。附加映射会生成两个映射中键的并集,并附加在两个映射中都存在的所有键的值。

<7>.条件语句

Soong 不支持 Android.bp 文件中的条件语句。但是,编译规则中需要条件语句的复杂问题将在 Go(在这种语言中,您可以使用高级语言功能,并且可以跟踪条件语句引入的隐式依赖项)中处理。大多数条件语句都会转换为映射属性,其中选择了映射中的某个值并将其附加到顶级属性。

要支持特定于架构的文件,请使用以下命令:

cc_library {...srcs: ["generic.cpp"],arch: {arm: {srcs: ["arm.cpp"],},x86: {srcs: ["x86.cpp"],},},
}

<8>.格式设置工具

Soong 包含一个针对 Blueprint 文件的规范格式设置工具,类似于 gofmt。如需以递归方式重新设置当前目录中所有 Android.bp 文件的格式,运行以下命令:

# bpfmt -w .

规范格式包括缩进四个空格、多元素列表的每个元素后面有换行符,以及列表和映射末尾有英文逗号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 在window 2024版笔记 下载 安装 操作 配置

---Docker 前言--- Docker windows版官方版是一款专业开源的应用容器引擎&#xff0c;可以加快用户构建、共享和运行现代应用程序的速度&#xff0c;支持运行Linux和Windows Docker容器。 Docker 在容器的基础上&#xff0c;进行了进一步的封装&#xff0c;从文件系统、网络互…

fluent脱硝SCR相对标准偏差、氨氮比、截面速度计算

# -*- coding: utf-8 -*- """ Created on Wed Sep 20 20:40:30 2023 联系QQ:3123575367&#xff0c;专业SCR脱硝仿真。 该程序用来处理fluent通过export-solution-ASCII-Space导出的数据&#xff0c;可计算标准偏差SD、相对标准偏差RSD,适用于求解平面的相对均匀…

RK3568笔记十六:Framebuffer实验

若该文为原创文章&#xff0c;转载请注明原文出处。 本意是移植LVGL&#xff0c;但在编译DRM过程中一直编译失败&#xff0c;然后就想Framebuffer是否可以用&#xff0c;所以测试一下。 一、framebuffer介绍 FrameBuffer中文译名为帧缓冲驱动&#xff0c;它是出现在2.2.xx内…

23款奔驰S400商务版没有后排电动座椅那改装一套跟选装有区别吗

改装的后排电动座椅通常提供以下功能&#xff1a; 电动调节&#xff1a;座椅可以通过按钮或控制面板进行前后调节&#xff0c;以适应乘客的腿部空间需求。 靠背角度调节&#xff1a;乘客可以通过电动调节功能来调整座椅的靠背角度&#xff0c;以获得更舒适的坐姿。 座椅倾斜调…

Java与JavaScript的区别与联系

Java是目前编程领域使用非常广泛的编程语言&#xff0c;相较于JavaScript&#xff0c;Java更被人们熟知。很多Java程序员想学门脚本语言&#xff0c;一看JavaScript和Java这么像&#xff0c;很有亲切感&#xff0c;那干脆就学它了&#xff0c;这也间接的帮助了JavaScript的发展…

红队打靶练习:HACK ME PLEASE: 1

信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:69:c7:bf, IPv4: 192.168.61.128 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.61.2 00:50:56:f0:df:20 …

PMDG 737

在Simbrief中生成计划后下载两个文件 放到C:\Users\32497\AppData\Local\Packages\Microsoft.FlightSimulator_8wekyb3d8bbwe\LocalState\packages\pmdg-aircraft-737(微软商店版本) 加油 先在飞行计划中查看计划燃油数量 MCDU中, AIRPLANE SEVICE 第二页, REQUEST FUEL TR…

Android---Jetpack Compose学习005

动画 1. 简单值动画 示例&#xff1a;背景颜色在紫色和绿色之间&#xff0c;以动画形式切换。使用 animateColorAsState() val backgroundColor by animateColorAsState(if (tabPage TabPage.Home) Purple100 else Green300) 该句代码中&#xff0c;有一个 backgroundColo…

【Linux】并发解决(上)-中断屏蔽,原子操作

&#x1f525;博客主页&#xff1a;PannLZ &#x1f38b;系列专栏&#xff1a;《Linux系统之路》 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 文章目录 并发解决1.中断屏蔽2.原子操作2.1整形原子操作2.2位原子操作原子变量使用例子 并发解决…

VSCode python插件:找不到自定义包导致语法解析失败

众所周知&#xff0c;在python源码中&#xff0c;我们可以通过 sys.path.append("path-to-lib") 来为python解释器添加自定义包的寻找路径。 但是vscode的默认python插件可没法聪明到根据这句话去找这个包&#xff0c;这就会导致后续代码中使用了这个库的部分无法享…

【前端实战小项目】学成在线网页制作

文章目录 1.项目准备1.1 项目目录 2.头部区域2.1 头部区域布局2.2 logo制作2.2 导航制作技巧(nav)2.3搜索区域(search)2.3用户区域(user区域) 3.banner区域3.1 总体布局3.2 左侧侧导航(left)3.3 右侧课程表(left) 4.精品推荐区域(recommend)5.精品课程( course)6.前端开发工程师…

『 C++ - STL 』位图(BitMap)与布隆过滤器(Bloom Filter)

文章目录 &#x1f9f8; 位图(BitMap)概念&#x1f9f8; 位图的实现&#x1fa85; 总体框架&#x1fa85; 位图的数据插入&#x1f9e9; 左移操作与右移操作的区别 &#x1fa85; 位图的数据删除&#x1fa85; 位图的数据查找&#x1fa85; 位图整体代码(供参考) &#x1f9f8;…