Android.bp-Dateiformat

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 oder false)
  • 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.