Les indicateurs de compilation sont des constantes de compilation et ne peuvent pas être modifiés au moment de l'exécution. Ces indicateurs sont utilisés dans les cas où les indicateurs de configuration ne peuvent pas être utilisés, par exemple :
- Vous disposez d'un code précompilé ou prédéfini que vous souhaitez inclure éventuellement dans un build.
- Vous souhaitez modifier le système de compilation lui-même.
- Vous souhaitez ajouter des indicateurs autour des dépendances pour gérer la taille du code.
- Vous souhaitez gérer le lancement d'une fonctionnalité, mais vous devez vérifier la valeur du flag avant que les flags de configuration ne soient mis à la disposition du système.
Déclarer un indicateur de compilation
Les indicateurs de compilation sont déclarés dans des fichiers textproto. Pour déclarer un indicateur de compilation:
- Itinéraire vers
WORKING_DIRECTORY/build/release/flag_declarations/
- Créez un fichier appelé
RELEASE_MY_FLAG_NAME.textproto
. Modifiez le fichier et ajoutez une entrée semblable à celle-ci:
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"
Où :
name
contient le nom de l'indicateur précédé deRELEASE_
. Seuls les caractères en majuscules et les traits de soulignement sont autorisés.namespace
contient l'espace de noms des contributions. Vous devez collaborer avec l'examinateur Google qui vous a été attribué pour déterminer votre espace de noms. Si vous utilisez des indicateurs de lancement de fonctionnalités pour assurer la stabilité de votre propre miroir AOSP, vous pouvez utiliser l'espace de noms comme vous le souhaitez.value
correspond au type et à la valeur initiaux de l'indicateur. Le type peut êtrebool_value
oustring_value
. Si le type eststring_value
, la valeur doit être placée entre guillemets. Si aucune valeur n'est spécifiée, la valeur est une chaîne vide. Les valeurs booléennes sont représentées partrue
ou par la chaîne vide pour "false".workflow
correspond àLAUNCH
ouPREBUILT
. UtilisezLAUNCH
pour les indicateurs booléens qui passent defalse
àtrue
, comme les indicateurs de lancement de fonctionnalités. UtilisezPREBUILT
pour les indicateurs qui définissent une version, généralement d'un prédéfini.containers
le type de code que vous écrivez, par exemple "vendor" pour le code fournisseur ou "product" pour le code produit. En cas de doute sur la valeur à utiliser, utilisez les quatre types de conteneurs, comme indiqué dans l'exemple précédent.
Utiliser un indicateur de compilation dans un fichier Soong
Dans le fichier de compilation et le module dans lesquels vous souhaitez interroger la valeur de l'indicateur, utilisez une instruction conditionnelle pour créer une branche en fonction de la valeur de l'indicateur. Par exemple, dans l'extrait de code suivant, la valeur de l'indicateur RELEASE__READ_FROM_NEW_STORAGE
est interrogée:
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 la valeur de cet indicateur est true
, le module libaconfig_storage_read_api_cc
est lié dynamiquement au module cc_defaults
.
Si la valeur de cet indicateur est false
, rien ne se passe (default: [],
).
Utiliser un indicateur de compilation dans un fichier makefile
Dans le fichier make, un indicateur de compilation est une variable make en lecture seule. L'exemple de fichier makefile suivant accède à un indicateur de compilation appelé 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 déclaration de cet indicateur comporte un champ workflow
défini sur PREBUILT
dans RELEASE_PACKAGE_NFC_STACK.textproto
et une valeur de chaîne de com.android.nfcservices
RELEASE_PACKAGE_NFC_STACK.textproto
, le fichier de valeurs d'indicateur pour la configuration de développement trunk_staging
.