Dichiarare e utilizzare un flag di compilazione

I flag di compilazione sono costanti di compilazione e non possono essere modificati durante l'esecuzione. Questi parametri vengono utilizzati in circostanze in cui non è possibile utilizzare 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.

Dichiarare un flag di compilazione

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 i 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 un predefinito.
    • containers il tipo di codice che stai scrivendo, ad esempio "vendor" per il codice fornitore o "product" per il codice prodotto. In caso di dubbi sul valore da utilizzare, utilizza tutti e quattro i tipi di contenitori come mostrato nell'esempio precedente.

Utilizzare un flag di compilazione in un file Soong

Nel file di compilazione e nel modulo in cui vuoi eseguire una query sul valore del flag, utilizza un condizione per eseguire il branching in base al valore del flag. Ad esempio, nello snippet seguente viene eseguito un 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 succede nulla (default: [],).

Utilizzare un flag di compilazione in un file make

Nel file make, un flag di compilazione è una variabile make di sola lettura. Il seguente esempio di file make accede a un flag di compilazione chiamato 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.