Starting March 27, 2025, we recommend using android-latest-release instead of aosp-main to build and contribute to AOSP. For more information, see Changes to AOSP.
Stay organized with collections
Save and categorize content based on your preferences.
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:
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.flags shown 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 as my_static_flag shown in
Declare an aconfig flag for Java
with _flag_values.textproto. The resulting filename is
my_static_flag_flag_values.textproto.
Edit the file and add a flag_value similar to the following:
package contains the same package name used in the declaration.
name contains the same name used in the declaration.
state is either ENABLED or DISABLED.
permission is either READ_WRITE or READ_ONLY. Generally, the
permission is set to READ_ONLY for 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.bp file, create a aconfig_values section similar to:
name is the unique name for the Soong build module. Google uses the
convention of
aconfig-values-platform_PATH_TO_RELEASE_CONFIG_DIR-CONFIG-NAME-package.name-all.
Note that PATH_TO_RELEASE_CONFIG_DIR is
build/release.
package contains the same package name used in the declaration.
srcs is 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 ..)
Edit the Android.bp file. This build file contains a list of the names
(name) associated with each flag values file. Add the name you used in the
previous build file (step 8) to this list.
Build Android, and run your new code to ensure that it's enabled per the
setting in the flag values file.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-06-12 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-06-12 UTC."],[],[],null,["# Set feature launch flag values\n\nBy default, all feature launch flags are `READ_WRITE` and set to `DISABLED`.\nBefore you can test a feature, you must override the default value used in the\nbuild by creating a *flag values file* for the flag. In a flag values file,\nyou set a individual flag's state (`ENABLED` or `DISABLED`) and permission\n(`READ_WRITE` or `READ_ONLY`).\n\nA *release configuration* is a directory that contains all of the flag values\nfiles for a specific build of Android (with certain features enabled and\ndisabled).\n\nAOSP ships with a few release configurations, such as `trunk_staging`.\nRelease configuration directories are found under\n\u003cvar translate=\"no\"\u003eWORKING_DIRECTORY\u003c/var\u003e`/build/release/aconfig/`.\n| **Note:** This page shows you how to add a flag to an existing release configuration as a means of teaching how release configurations work. The release configurations included in AOSP are defined by Google. Google doesn't accept contributions to update or change a configuration's feature release flags. Instead, you can define your own custom release configurations including default flag values in your forks of AOSP. For more information on release configurations, see [Set feature launch flag values](/docs/setup/build/feature-flagging/set-values).\n\nWhen you use the `lunch` command to\n[choose a target](/docs/setup/build/building#choose-a-target), you're\nalso setting the release configuration for the target.\nFor example, the\nfollowing is a `trunk_staging` target: \n\n lunch aosp_cf_x86_64_only_phone-trunk_staging-userdebug\n\nTrunk staging is a *development release configuration* because\nGoogle uses it to test features before general release. This configuration\nuses\nmostly `READ_WRITE` flags that let you test your code with features enabled or\ndisabled at runtime.\n\nAt general release, use a *release release configuration* . A release\nrelease configuration mostly uses `READ_ONLY` flags and reflects all of the code\nenabled for that release.\n\nAdd a flag to the trunk_staging release configuration\n-----------------------------------------------------\n\nTo test a new flag, add it to the `trunk_staging` release configuration as\nfollows:\n\n1. Navigate to \u003cvar translate=\"no\"\u003eWORKING_DIRECTORY\u003c/var\u003e`/build/release/aconfig/trunk_staging/`\n2. Create a directory with the same package name as your flag, such as `com.example.android.aconfig.demo.flags` shown in [Declare an aconfig flag for Java](/docs/setup/build/feature-flagging/declare-flag).\n3. Navigate to the new directory.\n4. In the directory, create a flag values file that combines the name used in the flag declaration (`.aconfig`) file, such as `my_static_flag` shown in [Declare an aconfig flag for Java](/docs/setup/build/feature-flagging/declare-flag) with `_flag_values.textproto`. The resulting filename is `my_static_flag_flag_values.textproto`.\n5. Edit the file and add a `flag_value` similar to the following:\n\n flag_value {\n package: \"com.example.android.aconfig.demo.flags\"\n name: \"my_static_flag\"\n state: DISABLED\n Permission: READ_WRITE\n }\n\n Where:\n - `package` contains the same package name used in the declaration.\n - `name` contains the same name used in the declaration.\n - `state` is either `ENABLED` or `DISABLED`.\n - `permission` is either `READ_WRITE` or `READ_ONLY`. Generally, the `permission` is set to `READ_ONLY` for flag values files that are part of a release configuration.\n6. Save the file and exit your editor.\n\n7. In the same directory as the flag values file, create a build file called\n `Android.bp`. This file is used to include the flag values file in the build.\n\n8. In the `Android.bp` file, create a `aconfig_values` section similar to:\n\n aconfig_values {\n name: \"aconfig-values-platform_build_release-trunk-staging-com.android.aconfig.test-all\",\n package: \"com.android.aconfig.test\",\n srcs: [\n \"*_flag_values.textproto\",\n ]\n }\n\n Where:\n - `name` is the unique name for the Soong build module. Google uses the convention of `aconfig-values-platform_`\u003cvar translate=\"no\"\u003ePATH_TO_RELEASE_CONFIG_DIR\u003c/var\u003e`-`\u003cvar translate=\"no\"\u003eCONFIG-NAME\u003c/var\u003e`-`\u003cvar translate=\"no\"\u003epackage.name\u003c/var\u003e`-all`. Note that \u003cvar translate=\"no\"\u003ePATH_TO_RELEASE_CONFIG_DIR\u003c/var\u003e is `build/release`.\n - `package` contains the same package name used in the declaration.\n - `srcs` is a list of all of your flag values files.\n9. Save the file and exit your editor.\n\n10. Navigate to the directory above the current directory (`cd ..`)\n\n11. Edit the `Android.bp` file. This build file contains a list of the names\n (`name`) associated with each flag values file. Add the name you used in the\n previous build file (step 8) to this list.\n\n12. Build Android, and run your new code to ensure that it's enabled per the\n setting in the flag values file."]]