By default, all feature launch flags are READ_WRITE and set to DISABLED.
Before you can test a feature, you must override the default value used in the
build by creating a flag values file for the flag. In a flag values file,
you set a individual flag's state (ENABLED or DISABLED) and permission
(READ_WRITE or READ_ONLY).
A release configuration is a directory that contains all of the flag values files for a specific build of Android (with certain features enabled and disabled).
AOSP ships with a few release configurations, such as trunk_staging.
Release configuration directories are found under
WORKING_DIRECTORY/build/release/aconfig/.
When you use the lunch command to
choose a target, you're
also setting the release configuration for the target.
For example, the
following is a trunk_staging target:
lunch aosp_cf_x86_64_only_phone-trunk_staging-userdebug
Trunk staging is a development release configuration because
Google uses it to test features before general release. This configuration
uses
mostly READ_WRITE flags that let you test your code with features enabled or
disabled at runtime.
At general release, use a release release configuration. A release
release configuration mostly uses READ_ONLY flags and reflects all of the code
enabled for that release.
Add a flag to the trunk_staging release configuration
To test a new flag, add it to the trunk_staging release configuration as
follows:
- Navigate to
WORKING_DIRECTORY/build/release/aconfig/trunk_staging/ - Create a directory with the same package name as your flag, such as
com.example.android.aconfig.demo.flagsshown in Declare an aconfig flag for Java. - Navigate to the new directory.
- In the directory, create a flag values file that combines the name used in
the flag declaration (
.aconfig) file, such asmy_static_flagshown in Declare an aconfig flag for Java with_flag_values.textproto. The resulting filename ismy_static_flag_flag_values.textproto. Edit the file and add a
flag_valuesimilar to the following:flag_value { package: "com.example.android.aconfig.demo.flags" name: "my_static_flag" state: DISABLED Permission: READ_WRITE }Where:
packagecontains the same package name used in the declaration.namecontains the same name used in the declaration.stateis eitherENABLEDorDISABLED.permissionis eitherREAD_WRITEorREAD_ONLY. Generally, thepermissionis set toREAD_ONLYfor flag values files that are part of a release configuration.
Save the file and exit your editor.
In the same directory as the flag values file, create a build file called
Android.bp. This file is used to include the flag values file in the build.In the
Android.bpfile, create aaconfig_valuessection similar to:aconfig_values { name: "aconfig-values-platform_build_release-trunk-staging-com.example.android.aconfig.demo.flags-all", package: "com.example.android.aconfig.demo.flags", srcs: [ "*_flag_values.textproto", ] }Where:
nameis the unique name for the Soong build module. Google uses the convention ofaconfig-values-platform_PATH_TO_RELEASE_CONFIG_DIR-CONFIG_NAME-package.name-all. This name must must match the name that soong auto-generates based on theaconfig_value_setdeclaration in the parent directory'sAndroid.bpfile. Note thatPATH_TO_RELEASE_CONFIG_DIRisbuild_release.packagecontains the same package name used in the declaration.srcsis a list of all of your flag values files.
Save the file and exit your editor.
Navigate to the directory above the current directory (
cd ..)Build Android, and run your new code to verify that it's enabled per the setting in the flag values file.