Per impostazione predefinita, i file Android.bp
sono semplici. Non contengono condizionali o istruzioni del flusso di controllo; tutta la complessità è gestita dalla logica di compilazione scritta in Go. Quando possibile, la sintassi e la semantica dei file Android.bp
sono simili ai file Bazel BUILD.
Moduli
Un modulo in un file Android.bp
inizia con un
tipo di modulo followed by a set of properties in name: "value",
format:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Ogni modulo deve avere una proprietà name
e il valore deve essere univoco in
tutti i file Android.bp
, ad eccezione dei valori della proprietà name
negli spazi dei nomi e nei moduli predefiniti, che possono ripetersi.
La proprietà srcs
specifica i file di origine utilizzati per compilare il modulo come elenco di stringhe. Puoi fare riferimento all'output di altri moduli che producono file di origine, come genrule
o filegroup
, utilizzando la sintassi di riferimento del modulo ":<module-name>"
.
Per un elenco dei tipi di moduli validi e delle relative proprietà, consulta il riferimento ai moduli Soong.
Tipi
Le variabili e le proprietà sono tipicamente tipiche, con variabili basate dinamicamente sulla prima assegnazione e proprietà impostate in modo statico in base al tipo di modulo. I tipi supportati sono:
- Valori booleani (
true
ofalse
) - Numeri interi (
int
) - Stringhe (
"string"
) - Elenchi di stringhe (
["string1", "string2"]
) - Mappe (
{key1: "value1", key2: ["value2"]}
)
Le mappe possono contenere valori di qualsiasi tipo, comprese le mappe nidificate. Gli elenchi e le mappe possono avere virgole finali dopo l'ultimo valore.
Glob
Le proprietà che accettano un elenco di file, come srcs
, possono anche accettare pattern di glob. I pattern glob possono contenere il normale carattere jolly UNIX *
, ad esempio
*.java
. I pattern glob possono contenere anche una singola carattere jolly **
come elemento percorso, che corrisponde a zero o più elementi percorso. Ad esempio,
java/**/*.java
corrisponde sia ai pattern java/Main.java
sia
java/com/android/Main.java
.
Variabili
Un file Android.bp
può contenere assegnazioni di variabili di primo livello:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
L'ambito delle variabili è limitato al resto del file in cui sono dichiarate, nonché a eventuali file Blueprint secondari. Le variabili sono immutabili con un'eccezione: possono essere aggiunte con un'assegnazione +=
, ma solo prima che vengano richiamate.
Commenti
I file Android.bp
possono contenere commenti /* */
su più righe in stile C e commenti //
su una riga in stile C++.
Operatori
Le stringhe, gli elenchi di stringhe e le mappe possono essere aggiunte utilizzando l'operatore +.
I numeri interi possono essere sommati utilizzando l'operatore +
. L'aggiunta di una mappa produce la unione delle chiavi in entrambe le mappe, aggiungendo i valori di eventuali chiavi presenti in entrambe le mappe.
Condizionali
prestog non supporta le condizionali nei file Android.bp
. Al contrario, la complessità delle regole di compilazione che richiederebbero condizioni viene gestita in Go, dove è possibile utilizzare funzionalità di linguaggio di alto livello e monitorare le dipendenze implicite introdotte dalle condizioni. La maggior parte delle espressioni condizionali viene convertita in una proprietà mappa, in cui uno dei valori della mappa viene selezionato e aggiunto alle proprietà di primo livello.
Ad esempio, per supportare i file specifici dell'architettura:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Formatter
Presto include un formattatore canonico per i file Blueprint, simile a gofmt. Per riformattare in modo ricorsivo tutti i file Android.bp
nella directory corrente, esegui:
bpfmt -w .
Il formato canonico include rientri di quattro spazi, nuove righe dopo ogni elemento di un elenco di più elementi e una virgola finale in elenchi e mappe.