网站 建设 函,网站建设陕西,全网推广代运营,国内营销策划公司排名简介#xff1a; CSDN博客专家#xff0c;专注Android/Linux系统#xff0c;分享多mic语音方案、音视频、编解码等技术#xff0c;与大家一起成长#xff01; 优质专栏#xff1a;Audio工程师进阶系列【原创干货持续更新中……】#x1f680; 优质专栏#xff1a;多媒… 简介 CSDN博客专家专注Android/Linux系统分享多mic语音方案、音视频、编解码等技术与大家一起成长 优质专栏Audio工程师进阶系列【原创干货持续更新中……】 优质专栏多媒体系统工程师系列【原创干货持续更新中……】 人生格言 人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注Android系统攻城狮 1.前言 本篇目的Android之Android.bp文件格语法。 2.Android.bp介绍
Android.bpBuild 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 .规范格式包括缩进四个空格、多元素列表的每个元素后面有换行符以及列表和映射末尾有英文逗号。