Android.bp-Dateiformat

Android.bp-Dateien sind standardmäßig 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 auf die Ergebnisse anderer Module verweisen, Quelldateien wie genrule oder filegroup mithilfe der Modulreferenz ":<module-name>".

Eine Liste der gültigen Modultypen und ihrer Eigenschaften finden Sie in der Soong-Modulreferenz.

Typen

Variablen und Eigenschaften sind stark typisiert, wobei Variablen dynamisch basierend auf die erste Zuweisung und Eigenschaften, die statisch durch den Modultyp festgelegt werden. Die Unterstützte Typen sind:

  • Boolesch (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 Globusmuster verwendet werden. Glob-Muster können beispielsweise den normalen UNIX-Platzhalter * enthalten. *.java. Glob-Muster können auch einen einzelnen Platzhalter ** als Pfadelement enthalten, der null oder mehr Pfadelementen entspricht. Beispiel: java/**/*.java stimmt sowohl mit java/Main.java als auch mit java/com/android/Main.java-Muster.

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 werden auf den Rest der Datei beschränkt, in der sie deklariert sind. als untergeordnete 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. Wenn Sie eine Zuordnung anhängen, 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

Bedingungen in Android.bp-Dateien werden von Song nicht unterstützt. 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 Properties der obersten Ebene angehängt wird.

So werden beispielsweise architekturspezifische Dateien unterstützt:

cc_library {
    ...
    srcs: ["generic.cpp"],
    arch: {
        arm: {
            srcs: ["arm.cpp"],
        },
        x86: {
            srcs: ["x86.cpp"],
        },
    },
}

Formatierer

Soong verfügt über einen kanonischen Formatierer für Blueprint-Dateien, ähnlich wie gofmt Um alle Elemente rekursiv neu zu formatieren, Android.bp-Dateien im aktuellen Verzeichnis führen Sie folgenden Befehl 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.