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:
- 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:
name
contiene il nome del flag preceduto daRELEASE_
. 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ò esserebool_value
ostring_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 cometrue
o come stringa vuota per false.workflow
èLAUNCH
oPREBUILT
. UtilizzaLAUNCH
per i flag booleani che passano dafalse
atrue
, in modo simile ai flag di lancio delle funzionalità. UtilizzaPREBUILT
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
.