默认情况下,所有功能发布标志都是 READ_WRITE
并设置为 DISABLED
。在测试某个功能之前,您必须为该标志创建一个标志值文件,以替换 build 中使用的默认值。在标志值文件中,您可以设置单个标志的状态(ENABLED
或 DISABLED
)和权限(READ_WRITE
或 READ_ONLY
)。
版本配置是一个目录,其中包含特定 Android build 的所有标志值文件(已启用和停用某些功能)。
AOSP 附带一些版本配置,例如 trunk_staging
。版本配置目录位于 WORKING_DIRECTORY/build/release/aconfig/
下。
使用 lunch
命令选择目标时,也要为该目标设置发布配置。例如,以下是 trunk_staging
目标:
lunch aosp_cf_x86_64_phone-trunk_staging-userdebug
Trunk staging 是一种开发版本配置,因为 Google 会在正式发布之前使用它来测试功能。此配置主要使用 READ_WRITE
标志,可让您在启用或停用某些功能的情况下在运行时测试代码。
在正式发布时,请使用发布版本配置。发布版本配置主要使用 READ_ONLY
标志,并反映为该版本启用的所有代码。
向 trunk_staging 版本配置添加标志
如需测试新标志,请将其添加到 trunk_staging
版本配置中,如下所示:
- 前往
WORKING_DIRECTORY/build/release/aconfig/trunk_staging/
- 创建一个与您的标志具有相同软件包名称的目录,例如为 Java 声明 aconfig 标志中所示的
com.example.android.aconfig.demo.flags
。 - 前往新目录。
- 在该目录中,创建一个标志值文件,其中包含标志声明 (
.aconfig
) 文件中使用的名称,例如通过_flag_values.textproto
为 Java 声明 aconfig 标志中显示的my_static_flag
。生成的文件名为my_static_flag_flag_values.textproto
。 修改该文件并添加
flag_value
,大致如下所示:flag_value { package: "com.example.android.aconfig.demo.flags" name: "my_static_flag" state: DISABLED Permission: READ_WRITE }
其中:
package
包含与声明中所用软件包名称相同的软件包名称。name
包含声明中所用名称相同的名称。state
是ENABLED
或DISABLED
。permission
是READ_WRITE
或READ_ONLY
。通常,对于属于版本配置的标志值文件,permission
会设置为READ_ONLY
。
保存文件并退出编辑器。
在与标志值文件相同的目录中,创建一个名为
Android.bp
的 build 文件。此文件用于在 build 中添加标志值文件。在
Android.bp
文件中,创建一个类似于以下内容的aconfig_values
部分:aconfig_values { name: "aconfig-values-platform_build_release-trunk-staging-com.android.aconfig.test-all", package: "com.android.aconfig.test", srcs: [ "*_flag_values.textproto", ] }
其中:
name
是 Soong build 模块独有的名称。Google 使用aconfig-values-platform_PATH_TO_RELEASE_CONFIG_DIR-CONFIG-NAME-package.name-all
的规范。请注意,PATH_TO_RELEASE_CONFIG_DIR
为build/release
。package
包含与声明中所用软件包名称相同的软件包名称。srcs
是您的所有标志值文件的列表。
保存文件并退出编辑器。
前往当前目录 (
cd ..
) 的上级目录修改
Android.bp
文件。此 build 文件包含与每个标志值文件关联的名称 (name
) 的列表。将您在上一个 build 文件(第 8 步)中使用的名称添加到此列表中。构建 Android 并运行新代码,确保它已按标志值文件中的设置予以启用。