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. Mithilfe der Modulreferenzsyntax ":<module-name>"
können Sie auf die Ausgabe anderer Module verweisen, die Quelldateien wie genrule
oder filegroup
generieren.
Eine Liste der gültigen Modultypen und ihrer Eigenschaften finden Sie in der Referenz für Soong-Module.
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.
Kleckse
Für Properties, die eine Liste von Dateien annehmen, z. B. srcs
, können auch Globusmuster 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, der 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 für 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.
Bedingte Anweisungen
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 bedingten Anweisungen werden in eine Karteneigenschaft umgewandelt, bei der einer der Werte in der Karte ausgewählt und den 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 von vier Leerzeichen, neue Zeilen nach jedem Element einer Liste mit mehreren Elementen und ein abschließendes Komma in Listen und Karten.