Per impostazione predefinita, i file Android.bp
sono semplici. Non contengono condizioni o
comandi di controllo del flusso; tutta la complessità è gestita dalla logica di compilazione scritta in
Go. Se possibile, la sintassi e la semantica dei file Android.bp
sono simili ai
file BUILD di Bazel.
Moduli
Un modulo in un file Android.bp
inizia con un
tipo di modulo
seguito da un insieme di proprietà nel formato name: "value",
:
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
nei namespace 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 generano
file di origine, come genrule
o filegroup
, utilizzando il riferimento del modulo
sintassi ":<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 digitate, con variabili basate dinamicamente su la prima assegnazione e le proprietà impostate in modo statico dal 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, incluse mappe nidificate. Gli elenchi e le mappe possono avere virgole finali dopo l'ultimo valore.
Glob
Anche le proprietà che accettano un elenco di file, come srcs
, possono assumere glob
pattern. 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 una sola eccezione:
può essere aggiunto a un compito +=
, ma solo prima che siano stati
a cui viene fatto riferimento.
Commenti
I file Android.bp
possono contenere commenti /* */
su più righe in stile C e commenti //
su una riga in stile C++.
Operatori
È possibile aggiungere stringhe, elenchi di stringhe e mappe utilizzando l'operatore +.
I numeri interi possono essere sommati utilizzando l'operatore +
. L'aggiunta di una mappa produce
di chiavi in entrambe le mappe, aggiungendo i valori di qualsiasi chiave
entrambe le mappe.
Condizionali
Soong non supporta i condizionali nei file Android.bp
. Invece,
le regole di creazione che richiederebbero condizionali vengono gestite in Go,
in cui è possibile usare funzionalità linguistiche di alto livello e dipendenze implicite.
introdotte da condizionali possono essere tracciate. La maggior parte dei condizionali viene convertita
proprietà map, 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"],
},
},
}
Formattatore
prestog include un formattatore canonico per i file di Blueprint, simile al
gofmt. Per riformattare tutti gli elementi
Android.bp
file nella directory corrente, esegui:
bpfmt -w .
Il formato canonico include rientri di quattro spazi, nuove righe dopo ogni elemento di un elenco con più elementi e una virgola finale in elenchi e mappe.