I flag di build sono costanti di build e non possono essere modificati durante l'esecuzione. Questi flag vengono utilizzati in circostanze in cui non è possibile utilizzare i flag di aconfig, ad esempio
- Hai un pezzo di codice precompilato o predefinito che vuoi includere facoltativamente in una build.
- Vuoi apportare modifiche al sistema di compilazione stesso.
- Vuoi inserire flag intorno alle 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 di Aconfig vengano resi disponibili dal sistema.
Dichiarare un flag di build
I flag di build vengono dichiarati nei file textproto. Per dichiarare un flag di build:
- Vai a
WORKING_DIRECTORY/build/release/flag_declarations/ - Crea un file denominato
RELEASE_MY_FLAG_NAME.textproto. 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:
namecontiene il nome del flag preceduto daRELEASE_. Sono consentite solo lettere maiuscole e trattini bassi.namespacecontiene lo spazio dei nomi per i contributi. Devi collaborare con il revisore 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 iniziali per il flag. Il tipo può esserebool_valueostring_value. Se il tipo èstring_value, il valore deve essere tra virgolette. Se non specificato, il valore è una stringa vuota. I valori booleani sono rappresentati cometrueo come stringa vuota per il valore false.workflowèLAUNCHoPREBUILT. UtilizzaLAUNCHper i flag booleani che passano dafalseatrue, in modo simile ai flag di lancio delle funzionalità. UtilizzaPREBUILTper i flag che impostano una versione, in genere di un prebuilt.containersil 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 build in un file Soong
Nel file di build e nel modulo in cui vuoi eseguire query sul valore del flag, utilizza un'istruzione condizionale per creare un ramo in base al 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 flag è false, non succede nulla (default: [],).
Utilizzare un flag di build in un makefile
Nel file make, un flag di compilazione è una variabile make di sola lettura. Il seguente
esempio di makefile 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 stringa di
com.android.nfcservices RELEASE_PACKAGE_NFC_STACK.textproto
nel file dei valori dei flag per la configurazione di sviluppo trunk_staging.