Android.bp
-Dateien sind von Natur aus einfach. Sie enthalten keine bedingten Anweisungen oder Anweisungen zur Ablaufsteuerung. Die gesamte Komplexität wird von der Build-Logik verwaltet, die in Go geschrieben ist. Sofern möglich, ähneln die Syntax und die Semantik von Android.bp
-Dateien denen von Bazel-BUILD-Dateien.
Module
Ein Modul in einer Android.bp
-Datei beginnt mit einem Modultyp, gefolgt von einer Reihe von Properties im name: "value",
-Format:
cc_binary {
name: "gzip",
srcs: ["src/test/minigzip.c"],
shared_libs: ["libz"],
stl: "none",
}
Jedes Modul muss eine name
-Property haben und der Wert muss in allen Android.bp
-Dateien eindeutig sein. Eine Ausnahme bilden die name
-Property-Werte in Namespaces und vorgefertigten Modulen, die sich wiederholen können.
Die Eigenschaft srcs
gibt die Quelldateien an, die zum Erstellen des Moduls verwendet wurden, als Liste von Strings. Sie können die Ausgabe anderer Module, die Quelldateien wie genrule
oder filegroup
erstellen, mithilfe der Modulreferenzsyntax ":<module-name>"
referenzieren.
Eine Liste der gültigen Modultypen und ihrer Attribute finden Sie in der Referenz zu Soong-Modulen.
Typen
Variablen und Eigenschaften sind stark typisiert. Variablen basieren dynamisch auf der ersten Zuweisung und Eigenschaften werden statisch vom Modultyp festgelegt. Folgende Typen werden unterstützt:
- Boolesche Werte (
true
oderfalse
) - Ganzzahlen (
int
) - Strings (
"string"
) - Listen mit Strings (
["string1", "string2"]
) - Google Maps (
{key1: "value1", key2: ["value2"]}
)
Zuordnungen können Werte beliebigen Typs enthalten, einschließlich verschachtelter Zuordnungen. Listen und Maps können nach dem letzten Wert ein abschließendes Komma enthalten.
Globs
Für Properties, die eine Liste von Dateien annehmen, z. B. srcs
, können auch Glob-Muster verwendet werden. Glob-Muster können den normalen UNIX-Platzhalter *
enthalten, z. B. *.java
. Glob-Muster können auch einen einzelnen **
-Platzhalter als Pfadelement enthalten, das null oder mehr Pfadelementen entspricht. Beispiel: java/**/*.java
stimmt sowohl mit dem Muster java/Main.java
als auch mit dem Muster java/com/android/Main.java
überein.
Variablen
Eine Android.bp
-Datei kann Variablenzuweisungen auf oberster Ebene enthalten:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
Variablen gelten für den Rest der Datei, in der sie deklariert sind, sowie auf alle untergeordneten Blueprint-Dateien. Variablen sind mit einer Ausnahme unveränderlich: Sie können mit einer +=
-Zuweisung angehängt werden, aber nur, bevor auf sie verwiesen wurde.
Kommentare
Android.bp
-Dateien können mehrzeilige /* */
-Kommentare im C-Stil und einzeilige //
-Kommentare im C++-Stil enthalten.
Netzbetreiber
Zeichenfolgen, Listen von Zeichenfolgen und Karten können mit dem +-Operator angehängt werden.
Ganzzahlen können mit dem Operator +
addiert werden. Durch das Anhängen einer Zuordnung wird die Vereinigung der Schlüssel in beiden Zuordnungen erstellt. Dabei werden die Werte aller Schlüssel angehängt, die in beiden Zuordnungen vorhanden sind.
Bedingungen
Soong unterstützt keine Bedingungen in Android.bp
-Dateien. Stattdessen werden komplexe Build-Regeln, die bedingte Anweisungen erfordern, in Go verarbeitet, wo Hochsprachenfunktionen verwendet und implizite Abhängigkeiten, die durch bedingte Anweisungen eingeführt werden, nachverfolgt werden können. Die meisten Bedingungen werden in eine Zuordnungseigenschaft umgewandelt, wobei einer der Werte in der Zuordnung ausgewählt und an die Eigenschaften der obersten Ebene angehängt wird.
So können Sie beispielsweise Architektur-spezifische Dateien unterstützen:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
Formatierer
Soong enthält einen kanonischen Formatierer für Blueprint-Dateien, ähnlich wie gofmt. Wenn Sie alle Android.bp
-Dateien im aktuellen Verzeichnis rekursiv neu formatieren möchten, führen Sie Folgendes aus:
bpfmt -w .
Das kanonische Format umfasst Einzüge mit vier Leerzeichen, neue Zeilen nach jedem Element einer Liste mit mehreren Elementen sowie ein nachgestelltes Komma in Listen und Zuordnungen.