Les indicateurs de compilation sont des constantes de compilation et ne peuvent pas être modifiés au moment de l'exécution. Ces options sont utilisées lorsque les options aconfig ne peuvent pas être utilisées, par exemple
- Vous disposez d'un code précompilé ou prédéfini que vous souhaitez inclure éventuellement dans un build.
- Vous souhaitez apporter des modifications pour compiler le système 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 de l'indicateur avant que les indicateurs aconfig ne soient mis à disposition par le 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 pour les contributions. Vous devez collaborer avec l'examinateur Google désigné 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 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 options qui définissent une version, généralement une version prédéfinie.containers
correspond au type de code que vous écrivez, par exemple "vendor" pour le code fournisseur ou "product" pour le code produit. Si vous n'êtes pas sûr de 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'option, utilisez une expression conditionnelle pour créer une branche sur la valeur de l'option. 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 makefile suivant accède à une option de compilation appelée 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 cette option 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'options pour la configuration de développement trunk_staging
.