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
檔案中,該值都必須是唯一的,但 namespace 和預先建構的模組中的 name
屬性值則可以重複。
srcs
屬性會將用於建構模組的來源檔案指定為字串清單。您可以使用模組參照語法 ":<module-name>"
,參照產生來源檔案 (例如 genrule
或 filegroup
) 的其他模組輸出內容。
如需有效模組類型及其屬性的清單,請參閱 Soong 模組參考資料。
類型
使用強式輸入變數和屬性,而且依據 第一個指派,以及由模組類型以靜態方式設定的屬性。 支援的類型如下:
- 布林值 (
true
或false
) - 整數 (
int
) - 字串 (
"string"
) - 字串清單 (
["string1", "string2"]
) - 地圖 (
{key1: "value1", key2: ["value2"]}
)
對應項目可包含任何類型的值,包括巢狀對應項目。清單和對應表可能會在最後一個值後方加上半形逗號。
眼鏡
接受檔案清單的屬性 (例如 srcs
) 也可採用 glob
例如模式Glob 模式可以包含一般的 UNIX 萬用字元 *
,例如
*.java
。Glob 模式也可以包含單一 **
萬用字元做為路徑元素,這可比對零或多個路徑元素。例如:
java/**/*.java
同時與 java/Main.java
和
java/com/android/Main.java
個模式。
變數
Android.bp
檔案可以包含頂層變數指派:
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
name: "gzip",
srcs: gzip_srcs,
shared_libs: ["libz"],
stl: "none",
}
變數的範圍會限制在其宣告所在檔案的其餘部分,以及任何子藍圖檔案。變數不可變動,但有一個例外:您可以使用 +=
指派附加變數,但只能在變數被參照之前。
留言
Android.bp
檔案可包含 C 樣式的多行 /* */
和 C++ 樣式的單行 //
註解。
運算子
您可以使用 + 運算子來附加字串、字串清單和地圖。
您可以使用 +
運算子將整數加總。附加對應會產生兩個對應中的鍵的聯集,並附加兩個對應中存在的任何鍵的值。
條件式
Soong 不支援 Android.bp
檔案中的條件式。
需要條件式的建構規則變得複雜且需要有條件的建構規則
都是在 Go 中處理
可使用高階語言功能,以及隱含依附元件
追蹤條件大部分條件都會轉換成
地圖屬性,其中選取地圖中的其中一個值,並附加
頂層屬性
舉例來說,如要支援特定架構的檔案:
cc_library {
...
srcs: ["generic.cpp"],
arch: {
arm: {
srcs: ["arm.cpp"],
},
x86: {
srcs: ["x86.cpp"],
},
},
}
格式設定工具
Soong 包含藍圖檔案的標準化格式設定,類似於 gofmt。如要遞迴重新格式化目前目錄中的所有 Android.bp
檔案,請執行以下指令:
bpfmt -w .
標準格式包括四個空格的縮排、多元素清單的每個元素後面都有新行,以及清單和地圖中的尾隨半形逗號。