build 标志是构建时间常量,在运行时无法更改。在无法使用 aconfig 标志的情况下,可以使用这些标志,例如:
- 您有一段预编译或预构建的代码,您可选择将其包含在 build 中。
- 您想要更改构建系统本身。
- 您想要在依赖项周围添加标志以管理代码大小。
- 您想要管理某项功能的发布,但需要在系统提供 aconfig 标志之前检查该标志的值。
声明 build 标志
build 标志在 textproto 文件中声明。如需声明 build 标志,请执行以下操作:
- 导航到
WORKING_DIRECTORY/build/release/flag_declarations/
- 创建名为
RELEASE_MY_FLAG_NAME.textproto
的文件。 修改该文件并添加类似以下内容的条目:
name: "RELEASE_MY_FLAG_NAME" namespace: "android_UNKNOWN" description: "Control if we should read from new storage." workflow: LAUNCH containers: "product" containers: "system" containers: "system_ext" containers: "vendor"
其中:
name
包含标志的名称,前面是RELEASE_
。仅允许使用大写字母和下划线。namespace
包含贡献的命名空间。您必须与指定的 Google 审核人员合作确定您的命名空间。如果您使用功能发布标志来保持您自己的 AOSP 镜像的稳定性,则可以随意使用命名空间。value
是标志的初始类型和值。类型可以是bool_value
或string_value
。如果类型为string_value
,值必须用引号引起来。如果未指定,该值为空字符串。布尔值显示为true
或空字符串(表示 false)。workflow
是LAUNCH
或PREBUILT
。使用LAUNCH
表示从false
到true
的布尔标志,类似于功能发布标志。使用PREBUILT
表示设置版本(通常是预构建版本)的标志。containers
:您要编写的代码类型,例如表示供应商代码的“vendor”或表示产品代码的“product”。如果您不确定要使用哪个值,请使用前面的示例中显示的全部四种容器类型。
在 Soong 文件中使用 build 标志
在要查询标志值的 build 文件和模块中,使用条件来根据标志值进行分支。例如,在以下代码段中,系统会查询 RELEASE__READ_FROM_NEW_STORAGE
标志的值:
cc_defaults {
name: "aconfig_lib_cc_shared_link.defaults",
shared_libs: select(release_flag("RELEASE_READ_FROM_NEW_STORAGE"), {
true: ["libaconfig_storage_read_api_cc],
default: [],
}),
}
如果此标志的值为 true
,则 libaconfig_storage_read_api_cc
模块会动态链接到 cc_defaults
模块。
如果此标志的值为 false
,则不会发生任何操作 (default: [],
)。
在 makefile 中使用 build 标志
在 makefile 中,build 标志是只读 make 变量。以下 makefile 示例访问一个名为 RELEASED_PACKAGE_NFC_STCK
的 build 标志:
# NFC and Secure Element packages
PRODUCT_PACKAGES += \
$(RELEASE_PACKAGE_NFC_STACK) \
Tag \
SecureElement \
android.hardware.nfc-service.st \
android.hardware.secure_element@1.0-service.st \
NfcOverlayCoral
此标志的声明在 RELEASE_PACKAGE_NFC_STACK.textproto
中将 workflow
字段设置为 PREBUILT
,并且字符串值为 com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
(适用于 trunk_staging
开发配置的标志值文件)。