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 no se pueden usar las marcas aconfig, como
- Tienes un código precompilado o ya compilado que quieres incluir de forma opcional en una compilación.
- Quieres hacer cambios en el sistema de compilación.
- Quieres colocar marcas alrededor de las dependencias para administrar el tamaño del código.
- Quieres administrar el lanzamiento de una función, pero debes 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 se declaran en los archivos textproto. Para declarar una marca de compilación, haz lo siguiente:
- Navegar 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"
donde:
name
contiene el nombre de la marca precedido porRELEASE_
. Solo se permiten letras mayúsculas y guiones bajos.namespace
contiene el espacio de nombres para las contribuciones. Debes trabajar con el revisor de Google asignado para determinar tu espacio de nombres. Si usas marcas de lanzamiento de funciones para mantener la estabilidad de tu propio espejo de AOSP, puedes usar el espacio de nombres como quieras.value
es el tipo y el valor inicial de la marca. El tipo puede serbool_value
ostring_value
. Si el tipo esstring_value
, el valor debe estar entre comillas. Si no se especifica, el valor es una string vacía. Los valores booleanos se representan comotrue
o como la string vacía para falso.workflow
esLAUNCH
oPREBUILT
. UsaLAUNCH
para las marcas booleanas que avanzan defalse
atrue
, de manera similar a las marcas de lanzamiento de funciones. UsaPREBUILT
para marcas que establezcan una versión, generalmente de una compilación previa.containers
: Es el tipo de código que escribes, como “proveedor” para el código de un proveedor o “producto” para el código de producto. Si no estás seguro del valor que debes usar, usa los cuatro tipos de contenedores como se muestra en el ejemplo anterior.
Usa una marca de compilación en un archivo Soong
En el archivo de compilación y el módulo en el que deseas consultar el valor de la marca, usa una condición para bifurcarse en el valor de la marca. 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 forma dinámica al módulo cc_defaults
.
Si el valor de esta marca es false
, no sucede nada (default: [],
).
Cómo usar una marca de compilación en un archivo Make
En el archivo make, una marca de compilación es una variable de make de solo lectura. En la siguiente muestra de archivo makefile, se 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
establecido en PREBUILT
en RELEASE_PACKAGE_NFC_STACK.textproto
y un valor de cadena de com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
en el archivo de valores de marca para la configuración de desarrollo de trunk_staging
.