Las marcas de compilación son constantes de tiempo de compilación y no se pueden cambiar durante el tiempo de ejecución. Estas marcas se usan en circunstancias en las que las marcas de aconfig no se pueden utilizar, por ejemplo, en los siguientes casos:
- Tienes código precompilado que quieres incluir de forma opcional en una compilación.
- Quieres realizar cambios en el sistema de compilación en sí.
- Quieres colocar marcas alrededor de dependencias para administrar el tamaño del código.
- Quieres administrar el lanzamiento de una función, pero necesitas verificar el valor de la marca antes de que el sistema ponga a disposición las marcas de aconfig.
Cómo declarar una marca de compilación
Las marcas de compilación son archivos textproto declarados. Para declarar una marca de compilación, haz lo siguiente:
- Navega a
WORKING_DIRECTORY/build/release/flag_declarations/
. - Crea un archivo llamado
RELEASE_MY_FLAG_NAME.textproto
. Edita el archivo y agrega una entrada similar a la siguiente:
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"
En la que:
name
contiene el nombre de la marca precedido porRELEASE_
. Solo se permiten letras en mayúscula y guiones bajos.namespace
contiene el espacio de nombres para las contribuciones. Para determinar tu espacio de nombres, debes trabajar con tu revisor de Google designado. Si utilizas marcas de lanzamiento de funciones para mantener la estabilidad de tu propia duplicación de AOSP, puedes usar el espacio de nombres como lo desees.value
es el valor y tipo inicial de la marca. El tipo puede serbool_value
ostring_value
. Si el tipo esstring_value
, la marca debe estar entre comillas. Si no se especifica, el valor es una cadena vacía. Los valores booleanos se representan comotrue
, o bien con la cadena vacía correspondiente a "false".workflow
esLAUNCH
oPREBUILT
. UsaLAUNCH
para las marcas booleanas que avanzan defalse
atrue
, similares a las marcas de lanzamiento de funciones. UsaPREBUILT
para las marcas que configuran una versión, en general de una compilación previa.containers
es el tipo de código que estás escribiendo, como "proveedor" para el código del proveedor o "producto" para el del producto. Si no sabes qué valor usar, utiliza los cuatro tipos de contenedores, como se mostró en el ejemplo anterior.
Cómo usar una marca de compilación en un archivo de Soong
En el archivo y módulo de compilación en los que quieres consultar el valor de la marca, usa un condicional para hacerlo. Por ejemplo, en el siguiente fragmento, se consulta el valor de la marca 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: [],
}),
}
Si el valor de esta marca es true
, el módulo libaconfig_storage_read_api_cc
se vincula de manera dinámica al módulo cc_defaults
.
Si el valor de esta marca es false
, no ocurre nada (default: [],
).
Cómo usar una marca de compilación en un archivo de Make
En el archivo de Make, una marca de compilación es una variable de Make de solo lectura. El siguiente archivo de Make de ejemplo accede a una marca de compilación llamada 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
La declaración de esta marca tiene un campo workflow
configurado en PREBUILT
en RELEASE_PACKAGE_NFC_STACK.textproto
y un valor de cadena de com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
, el archivo de valores de la marca para la configuración de desarrollo de trunk_staging
.