Dichiarare e utilizzare un flag di compilazione

I flag di compilazione sono costanti di compilazione e non possono essere modificati durante l'esecuzione. Questi flag vengono utilizzati nei casi in cui non è possibile usare i flag aconfig, ad esempio:

  • Hai un codice precompilato o precompilato che vuoi includere facoltativamente in una build.
  • Vuoi apportare modifiche al sistema di compilazione stesso.
  • Vuoi inserire flag nelle dipendenze per gestire le dimensioni del codice.
  • Vuoi gestire il lancio di una funzionalità, ma devi controllare il valore del flag prima che i flag aconfig vengano resi disponibili dal sistema.

Dichiara un flag di build

I flag di compilazione vengono dichiarati nei file textproto. Per dichiarare un flag di compilazione:

  1. Vai a WORKING_DIRECTORY/build/release/flag_declarations/
  2. Crea un file denominato RELEASE_MY_FLAG_NAME.textproto.
  3. Modifica il file e aggiungi una voce simile alla seguente:

    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"
    

    Dove:

    • name contiene il nome del flag preceduto da RELEASE_. Sono consentiti solo lettere maiuscole e trattini bassi.
    • namespace contiene lo spazio dei nomi per i contributi. Devi collaborare con il revisore di Google assegnato per determinare il tuo spazio dei nomi. Se utilizzi flag di lancio delle funzionalità per mantenere la stabilità del tuo mirror AOSP, puoi utilizzare lo spazio dei nomi come preferisci.
    • value è il tipo e il valore iniziale del flag. Il tipo può essere bool_value o string_value. Se il tipo è string_value, il valore deve essere tra virgolette. Se non specificato, il valore è una stringa vuota. I valori booleani vengono rappresentati come true o come stringa vuota per false.
    • workflow è LAUNCH o PREBUILT. Utilizza LAUNCH per i flag booleani che passano da false a true, in modo simile ai flag di lancio delle funzionalità. Utilizza PREBUILT per i flag che impostano una versione, in genere di tipo predefinito.
    • containers il tipo di codice che stai scrivendo, ad esempio "fornitore" per il codice del fornitore o "prodotto" per il codice del prodotto. Se hai dubbi sul valore da utilizzare, utilizza tutti e quattro i tipi di container come mostrato nell'esempio precedente.

Usa un flag di build in un file soong

Nel file e nel modulo di build in cui desideri eseguire una query sul valore del flag, utilizza un condizionale per ramificare il valore del flag. Ad esempio, nel seguente snippet viene eseguita una query sul valore del flag 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: [],
  }),
}

Se il valore di questo flag è true, il modulo libaconfig_storage_read_api_cc è collegato dinamicamente al modulo cc_defaults.

Se il valore di questo indicatore è false, non accade nulla (default: [],).

Utilizzare un flag di compilazione in un file make

Nel file make, un flag di build è una variabile make di sola lettura. Il seguente esempio di makefile accede a un flag di build denominato 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 dichiarazione di questo flag ha un campo workflow impostato su PREBUILT in RELEASE_PACKAGE_NFC_STACK.textproto e un valore di stringa di com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto il file dei valori dei flag per la configurazione di sviluppo trunk_staging.