Android.bp 檔案格式

Android.bp 檔案經過特別設計,相當簡單。不包含條件式或 控制流程聲明所有複雜程度的作業都是由以 開始在可能的情況下,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 屬性會指定用於建構模組的來源檔案, 字串清單。您可以透過 使用模組參照來來源檔案,例如 genrulefilegroup 語法 ":<module-name>"

如需有效模組類型及其屬性的清單,請參閱 Soong 模組參考資料

類型

使用強式輸入變數和屬性,而且依據 第一個指派,以及由模組類型以靜態方式設定的屬性。 支援的類型如下:

  • 布林值 (truefalse)
  • 整數 (int)
  • 字串 ("string")
  • 字串清單 (["string1", "string2"])
  • 地圖 ({key1: "value1", key2: ["value2"]})

地圖可包含任何類型的值,包括巢狀地圖。清單和地圖 在最後一個值後面加上半形逗號。

眼鏡

接受檔案清單的屬性 (例如 srcs) 也可採用 glob 例如模式Glob 模式可以包含一般的 UNIX 萬用字元 *,例如 *.java。Glob 模式也可以包含單一 ** 萬用字元做為路徑 元素,該元素會比對零個或多個路徑元素。例如: java/**/*.java 同時與 java/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",
}

變數的範圍限定在宣告目標檔案的其餘部分 也可以是任何子項 Blueprint 檔案變數不可變動,但有一個例外狀況: 可附加至 += 作業,但僅限已建立 參照。

留言

Android.bp 檔案可包含 C 樣式多行 /* */ 和 C++ 樣式 單行 // 註解。

運算子

您可以使用 + 運算子來附加字串、字串清單和地圖。 您可以使用 + 運算子將整數加總。附加地圖會產生 合併使用兩個對應中的鍵,並附加 兩個地圖

條件式

Soong 不支援 Android.bp 檔案中的條件式。 需要條件式的建構規則變得複雜且需要有條件的建構規則 都是在 Go 中處理 可使用高階語言功能,以及隱含依附元件 追蹤條件大部分條件都會轉換成 地圖屬性,其中選取地圖中的其中一個值,並附加 頂層屬性

舉例來說,如要支援特定架構的檔案:

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

格式設定工具

Soong 包含 Blueprint 檔案的標準格式器,例如: gofmt。以遞迴方式重新設定所有文字格式 目前目錄中的 Android.bp 個檔案,執行下列指令:

bpfmt -w .

標準格式包含四個空格,每個元素後方都加上新行 多元素清單的結尾,清單和地圖的結尾為半形逗號。