设置功能发布标志值

默认情况下,所有功能发布标志都是 READ_WRITE 并设置为 DISABLED。在测试某个功能之前,您必须为该标志创建一个标志值文件,以覆盖 build 中使用的默认值。在标志值文件中,您可以设置单个标志的状态(ENABLEDDISABLED)和权限(READ_WRITEREAD_ONLY)。

版本配置是一个目录,其中包含特定 Android build 的所有 flag 值文件(已启用和停用某些功能)。

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 版本配置中,如下所示:

  1. 导航到WORKING_DIRECTORY/build/release/aconfig/trunk_staging/
  2. 创建一个与您的标志具有相同软件包名称的目录,例如为 Java 声明 aconfig 标志中所示的 com.example.android.aconfig.demo.flags
  3. 前往新目录。
  4. 在该目录中,创建一个标志值文件,其中包含标志声明 (.aconfig) 文件中使用的名称,例如通过 _flag_values.textproto 为 Java 声明 aconfig 标志中显示的 my_static_flag。生成的文件名为 my_static_flag_flag_values.textproto
  5. 修改该文件并添加 flag_value,如下所示:

    flag_value {
      package: "com.example.android.aconfig.demo.flags"
      name: "my_static_flag"
      state: DISABLED
      Permission: READ_WRITE
    }
    

    其中:

    • package 包含与声明中所用软件包名称相同的软件包名称。
    • name 包含声明中所用名称相同的名称。
    • stateENABLEDDISABLED
    • permissionREAD_WRITEREAD_ONLY。通常,对于属于版本配置的标志值文件,permission 会设置为 READ_ONLY
  6. 保存文件并退出编辑器。

  7. 在与标志值文件相同的目录中,创建一个名为 Android.bp 的 build 文件。此文件用于在 build 中包含 flag 值文件。

  8. 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_DIRbuild/release
    • package 包含与声明中所用软件包名称相同的软件包名称。
    • srcs 是您的所有标志值文件的列表。
  9. 保存文件并退出编辑器。

  10. 前往当前目录 (cd ..) 的上级目录

  11. 修改 Android.bp 文件。 此 build 文件包含与每个标志值文件关联的名称 (name) 的列表。将您在上一个 build 文件(第 8 步)中使用的名称添加到此列表中。

  12. 构建 Android 并运行新代码,以确保它已根据标志值文件中的设置启用。