Déclarer et utiliser un indicateur de compilation

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 :

  1. Itinéraire vers WORKING_DIRECTORY/build/release/flag_declarations/
  2. Créez un fichier appelé RELEASE_MY_FLAG_NAME.textproto.
  3. 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é de RELEASE_. 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 être bool_value ou string_value. Si le type est string_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 par true ou par la chaîne vide pour "false".
    • workflow correspond à LAUNCH ou PREBUILT. Utilisez LAUNCH pour les indicateurs booléens qui passent de false à true, comme les indicateurs de lancement de fonctionnalités. Utilisez PREBUILT 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.