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

news2025/7/12 3:57:21

简介: 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.coloradmin.cn/o/1459403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营day20

题目&#xff1a;530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先 参考链接&#xff1a;代码随想录 530.二叉搜索树的最小绝对差 思路&#xff1a;我一开始想到的方法是先生成中序序列&#xff0c;然后对相邻两项的差进行计算&#xff0c;取…

代码随想录刷题笔记-Day21

1. 二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。…

聊聊 Git SubModule(子模块)

比如在公司不同开发团队中&#xff0c;有一个基础共享库&#xff0c;同时被多个项目调用。若要保证基础共享库的动态更新&#xff0c;那么就需要把共享库独立为一个代码库&#xff0c;但是分别把共享库中的文件拷贝到各自的项目中会造成冗余&#xff0c;而且再次更新共享库就会…

提升认知水平和防止偏见浅谈

提升认知水平和防止偏见浅谈 《庄子外物》&#xff1a;井蛙不可语海&#xff0c;夏虫不可语冰。 不要跟井底的青蛙谈论大海&#xff0c;因为它的认知只有井底那么大&#xff0c;大海对于它来说是认知盲区&#xff1b;不要与夏虫去谈论冰雪&#xff0c;因为夏虫一生很短没有经历…

香港优才计划认可大学名单有哪些?武大/西安交大/哈工大/中南大学毕业生,能加名校30分吗?

关注香港优才的朋友应该知道&#xff0c;优才计划采用计分制&#xff0c;综合计分制下&#xff0c;有一个“名校”加分项&#xff0c;如果毕业院校在世界百强大学名单内&#xff0c;可以多加30分&#xff01; 但这个世界百强大学名单&#xff0c;可能有很多人不是很清楚&#x…

用冒泡排序实现快速排序(qsort函数),指针进阶实例

目录 1、qsort函数是什么 2、冒泡排序实现指针进阶 2.1 主函数 2.2 功能函数声明​编辑 2.3 my_qsort函数介绍 2.4 Swap函数 总结 1、qsort函数是什么 qsort函数是c语言自带的函数&#xff0c;其功能是实现快速排序。我们来看一下他的参数和返回值&#xff1a; 以上就是q…

代码随想录算法训练营DAY21 | 二叉树 (9)

一、LeetCode 669 修建二叉搜索树 题目链接&#xff1a;669.修建二叉搜索树https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 思路&#xff1a;递归三部曲-定参数、返回值-定终止条件-定单层递归逻辑 class Solution {public TreeNode trimBST(TreeNode …

深度学习基础——卷积神经网络(一)

卷积操作与自定义算子开发 卷积是卷积神经网络中的基本操作&#xff0c;对于图像的特征提取有着关键的作用&#xff0c;本文首先介绍卷积的基本原理与作用&#xff0c;然后通过编写程序实现卷积操作&#xff0c;并展示了均值、高斯与sobel等几种经典卷积核的卷积效果&#xff…

HTML-介绍-MDN文档学习笔记

HTML-介绍 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever MDN中文官网 HTML-简介 MDN 文档引用&#xff1a; 就其核心而言&#xff0c;HTML 是一种相当简单的、由不同元素组成的标记语言&#xff0c;它可以被应用于文本片段&#xff0c;使文本在文档中具…

Security6.2 中的SpEL 表达式应用(权限注解使用)

最近学习若依框架&#xff0c;里面的权限注解涉及到了SpEL表达式 PreAuthorize("ss.hasPermi(system:user:list)")&#xff0c;若依项目中用的是自己写的方法进行权限处理&#xff0c; 也可以只用security 来实现权限逻辑代码&#xff0c;下面写如何用security 实现。…

[计算机网络]---UDP协议

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、端口号…

HarmonyOS - 实现多设备协同开发实战教程~

前言 现在随着个人设备越来越多&#xff0c;越来越需要多个设备之间相互感知和连接&#xff0c;设备和设备之间可以相互联动&#xff0c;形成互联互通的场景&#xff0c;而搭载HarmonyOS的设备恰好可以满足这一点 。下面通过开发一个HarmonyOS的多端分布式表白应用来实现设备之…

STM32_ESP8266 连接阿里云 操作图解

一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是&#xff1a;AT固件。连接阿里云需要&#xff1a;MQTT固件。 因此&#xff0c;我们需要给8266重新烧录 MQTT固件。 针对“魔女开发板&#xff0c;ESP8266模块烧录MQTT固件&#xff0c;图解教程如下&#xff1a; ESP8266 烧录 …

代码随想录算法训练营|二叉树总结

二叉树的定义&#xff1a; struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode():val(0),left(nullptr),right(nullptr){}TreeNode(int val):val(val),left(nullptr),right(nullptr){}TreeNode(int val,TreeNode* left,TreeNode* right):val(val),left(left),…

网工内推 | 证券公司急招网工,base上海,年薪50W

01 广发证券 招聘岗位&#xff1a;网络工程师 任职要求&#xff1a; 1、懂基础建设网络&#xff0c;虚拟化&#xff0c;或者服务器中任意一个都可以&#xff08;需资深&#xff09;2、985/211本硕 3、年龄最好35以下 薪资待遇&#xff1a; 1、工作时间9:00-17:00 2、根据资历…

思腾合力邀您共赴第二届世界元宇宙大会

由中国仿真学会、中国指挥与控制学会和北京理工大学共同主办&#xff0c;上海市嘉定区安亭镇人民政府和中国仿真学会元宇宙专业委员会承办的第二届世界元宇宙大会大会以“虚实相生、产业赋能”为主题&#xff0c;聚焦元宇宙关键技术发展的共性问题&#xff0c;交流元宇宙技术产…

Window系统GPT-SoVITS配置安装

GPT-SoVITS配置安装 GPT-SoVITS配置Python下载以及安装源文件安装依赖 运行整理在安装配置环境时遇到的报错总结 GPT-SoVITS配置 作者链接 Python下载以及安装 版本这里根据教程的版本走即可&#xff0c;这里不会安装python或者不会配置环境的参考我之前的文章 Python 3.9,…

C# GTS四轴运动控制器实例(固高科技步进电机不带编码器)

注&#xff1a;由于电机不带编码器&#xff0c;无法做home和当前位置信息读取&#xff01; 功能&#xff1a; 三个轴的点位运动&#xff1a;前进后退&#xff0c;并分别显示每个轴的移动脉冲数(可以换算为距离)&#xff01; 开发环境&#xff1a;VS2017 硬件设备&#xff1a;固…

编程笔记 Golang基础 007 第一个程序:hello world 使用Goland

编程笔记 Golang基础 007 第一个程序&#xff1a;hello world 使用Goland 步骤1&#xff1a;启动GoLand并创建新项目步骤2&#xff1a;创建主包和主函数步骤3&#xff1a;运行程序小结 开始在Goland环境中编程go语言代码啦。 步骤1&#xff1a;启动GoLand并创建新项目 打开GoL…

[word] word中图片衬于文字下方无法显示 #媒体#微信

word中图片衬于文字下方无法显示 1、如图&#xff0c;图片“衬于文字下方”&#xff0c;文字下方的图象看不见 2、光标这位到图片上这段文字中&#xff0c;点击“格式”&#xff0d;“边框和底纹”&#xff0c;切换到“底纹”选项卡。可发现这两段文字底纹被设置成“白色”了 …