Флаги сборки — это константы времени сборки, которые нельзя изменить во время выполнения. Эти флаги используются в ситуациях, когда невозможно использовать флаги aconfig, например:
- У вас есть предварительно скомпилированный или предварительно собранный фрагмент кода, который вы хотите при желании включить в сборку.
 - Вы хотите внести изменения в саму сборку системы.
 - Вы хотите установить флаги вокруг зависимостей, чтобы управлять размером кода.
 - Вы хотите управлять запуском функции, но вам необходимо проверить значение флага до того, как система сделает флаги aconfig доступными.
 
Объявите флаг сборки
Флаги сборки объявляются в файлах textproto. Чтобы объявить флаг сборки:
-  Перейдите в 
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. Если type —string_value, значение должно быть заключено в кавычки. Если не указано, значение — пустая строка. Булевы значения представлены либо какtrue, либо как пустая строка для false. -  
workflowможет бытьLAUNCHилиPREBUILT.LAUNCHиспользуется для логических флагов, которые изменяются отfalseдоtrue, аналогично флагам запуска функций.PREBUILTиспользуется для флагов, которые устанавливают версию, обычно для предварительно собранного проекта. -  
containers— тип кода, который вы пишете, например, «vendor» для кода поставщика или «product» для кода продукта. Если вы сомневаетесь в правильности выбора значения, используйте все четыре типа контейнеров, как показано в предыдущем примере. 
-  
 
Использовать флаг сборки в файле Soong
 В файле сборки и модуле, где вы хотите запросить значение флага, используйте условное выражение для перехода по значению флага. Например, в следующем фрагменте кода запрашивается значение флага 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
 В make-файле флаг сборки — это переменная make, доступная только для чтения. Следующий пример make-файла обращается к флагу сборки RELEASED_PACKAGE_NFC_STCK :
# 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
 Для этого объявления флага задано поле workflow PREBUILT в RELEASE_PACKAGE_NFC_STACK.textproto и строковое значение com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto в файле значений флагов для конфигурации разработки trunk_staging .