Флаги сборки являются константами времени сборки и не могут быть изменены во время выполнения. Эти флаги используются в тех случаях, когда флаги 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, вы можете использовать namespace по своему усмотрению. -
value— это начальный тип и значение флага. Тип может бытьbool_valueилиstring_value. Если тип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.
В файле makefile флаг сборки представляет собой переменную make, доступную только для чтения. В следующем примере файла makefile используется флаг сборки с именем 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 .