Android.bp ファイル形式

Android.bp ファイルの設計はシンプルです。条件文または制御フロー文は含まれません。すべての複雑性は、Go で記述されたビルドロジックによって処理されます。Android.bp ファイルの構文とセマンティクスは、可能な範囲で Bazel BUILD ファイル を模倣しています。

モジュール

Android.bp ファイル内のモジュールは、最初がモジュール タイプで、次に name: "value", 形式のプロパティのセットが続きます。

cc_binary {
    name: "gzip",
    srcs: ["src/test/minigzip.c"],
    shared_libs: ["libz"],
    stl: "none",
}

すべてのモジュールには name プロパティが必要であり、値はすべての Android.bp ファイル全体で一意でなければなりません。ただし、名前空間と事前ビルド済みモジュールの name プロパティ値は例外です(繰り返し可能です)。

srcs プロパティでは、モジュールのビルドに使用するソースファイルを文字列のリストとして指定します。モジュールの参照構文 ":<module-name>" を使用することで、ソースファイルを生成する他のモジュール(genrulefilegroup など)の出力を参照できます。

有効なモジュール タイプとそのプロパティのリストについては、Soong モジュール リファレンスをご覧ください。

変数とプロパティは厳格に型付けされます。変数は最初の割り当てに基づいて動的に型付けされ、プロパティはモジュール タイプによって静的に設定されます。サポートされる型は次のとおりです。

  • ブール値(true または false
  • 整数(int
  • 文字列("string"
  • 文字列のリスト(["string1", "string2"]
  • マップ({key1: "value1", key2: ["value2"]}

マップには、ネストされたマップを含む、任意の型の値を含めることが可能です。リストとマップでは、最後の値の後にカンマが付くことがあります。

glob

ファイルのリストを取得するプロパティ(srcs など)は glob パターンも取得できます。glob パターンには、通常の UNIX ワイルドカード * を使用できます(例: *.java)。glob パターンには、パス要素として単一の ** ワイルドカードを指定できます。これはゼロ個以上のパス要素に一致します。たとえば、java/**/*.javajava/Main.javajava/com/android/Main.java の両方のパターンに一致します。

変数

Android.bp ファイルには、以下のように最上位の変数割り当てが含まれる場合があります。

gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
    name: "gzip",
    srcs: gzip_srcs,
    shared_libs: ["libz"],
    stl: "none",
}

変数のスコープは、変数が宣言されたファイルの残りの部分と、子ブループリント ファイルに限定されます。変数は 1 つの例外を除いて不変です。その例外とは、変数が参照される前に限り、+= による代入を使用して変数を先頭に付加できる場合です。

コメント

Android.bp ファイルには、C スタイルの複数行コメント(/* */)と C++ スタイルの単一行コメント(//)を記述できます。

演算子

+ 演算子を使用して、文字列、文字列のリスト、マップを先頭に付加できます。 また、+ 演算子を使用して、整数を加算できます。マップを先頭に付加すると両方のマップのキーが結合され、両方のマップに存在するすべてのキーの値が先頭に付加されます。

条件文

Soong は、Android.bp ファイルの条件文をサポートしていません。代わりに、条件文を必要とするビルドルールの複雑性は Go で処理されます。Go では高度な言語機能を使用でき、条件文によって導入される暗黙的な依存関係をトラッキングできます。ほとんどの条件文は map プロパティに変換され、マップ内の値の 1 つが選択され、最上位のプロパティの先頭に付加されます。

たとえば、アーキテクチャ固有のファイルをサポートするには、次のようにします。

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

フォーマッタ

Soong には、gofmt に似たブループリント ファイル用の正規フォーマッタが含まれています。現在のディレクトリ内の Android.bp ファイルをすべて再帰的に再フォーマットするには、次のコマンドを実行します。

bpfmt -w .

正規フォーマットには、4 個のスペースのインデント、複数要素リストの各要素の後の改行、リストとマップの末尾のカンマなどがあります。