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

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

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

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注: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 .

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

相关推荐
毛豆的毛豆Y19 天前
AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解
aosp·launcher3·android14
毛豆的毛豆Y24 天前
AOSP Android14 Launcher3——RecentsView最近任务数据加载
aosp·launcher3·android14
毛豆的毛豆Y24 天前
AOSP Android14 Launcher3——点击桌面图标启动应用动画流程
aosp·launcher3·android14
毛豆的毛豆Y25 天前
AOSP Android14 Launcher3——远程窗口动画关键类SurfaceControl详解
aosp·launcher3·android14
毛豆的毛豆Y1 个月前
AOSP Android14 Launcher3——底部任务栏Taskbar详解
aosp·launcher3·android14
hedalei5 个月前
RK3576 Android14编译OTA包提示java.lang.UnsupportedClassVersionError问题
android·android14·rk3576
梦天20155 个月前
soong语法说明、android.bp语法说明
android.bp·soong语法·android.bp语法
江上清风山间明月9 个月前
Android系统Android.bp文件详解
android·android.bp
Android系统攻城狮1 年前
Android14之智能指针的弱引用、强引用、弱指针、强指针用法区别及代码实例(二百零五)
智能指针·弱引用·强引用·android14·强指针·弱指针
Android系统攻城狮1 年前
Android14之selinux报错:ERROR: end of file in comment(一百九十七)
selinux·android14