Android.bp是用來替換Android.mk的配置文件忌堂,它使用Blueprint框架來解析。Blueprint是生成酗洒、解析Android.bp的工具士修,是Soong的一部分。Soong則是專為Android編譯而設(shè)計(jì)的工具樱衷,Blueprint只是解析文件的形式棋嘲,而Soong則解釋內(nèi)容的含義,最終轉(zhuǎn)換成Ninja文件矩桂。
1沸移、模塊
定義一個(gè)模塊從模塊的類型開始,模塊有不同的類型侄榴,如下例子中的“cc_binary”雹锣,模塊包含一些屬性格式為“property-name:
property-value”,其中name屬性必須指定癞蚕,其屬性值必須是全局唯一的蕊爵。
cc_binary{
? ? name: "gzip",
? ? srcs: ["src/test/minigzip.c"],
? ? shared_libs: ["libz"],
? ? stl: "none",
}
默認(rèn)模塊“cc_defaults”的用法如下。
cc_defaults{
? ? name: "gzip_defaults",
? shared_libs: ["libz"],
? ? stl: "none",
}
cc_binary{
? ? name: "gzip",
? ? defaults: ["gzip_defaults"],
? ? srcs: ["src/test/minigzip.c"],
}
2桦山、變量
變量賦值可以通過“=”號賦值攒射。
gzip_srcs = ["src/test/minigzip.c"],
cc_binary {
? name: "gzip",
? ? srcs: gzip_srcs,
? shared_libs: ["libz"],
? stl: "none",
}
3、注釋
注釋包括單行注釋//和多行注釋/* */恒水。
4会放、類型
具體支持以下幾種類型:
Bool(`true` or `false`)
Integers(`int`)
Strings(`"string"`)
Listsof strings (`["string1", "string2"]`)
Maps(`{key1: "value1", key2: ["value2"]}`)
5、操作符
String類型钉凌、字符串列表類型和Map類型支持操作符“+”咧最。
6、格式控制工具
bpfmt是一個(gè)bp文件的格式控制工具,包括4個(gè)空格的縮進(jìn)窗市、列表有多個(gè)元素時(shí)每個(gè)元素一行先慷、列表和map的最后一個(gè)元素多一個(gè)冗余的逗號等等。工具目錄為:build/blueprint/bpfmt/
在當(dāng)前目錄下執(zhí)行以下命令:
bpfmt-w .
7咨察、Android.mk轉(zhuǎn)為Android.bp
androidmk工具可以把mk文件轉(zhuǎn)換為bp文件论熙,但一些復(fù)雜的用法和自定義的規(guī)則需要手動(dòng)轉(zhuǎn)換。工具目錄為:build/soong/androidmk/
androidmkAndroid.mk>Android.bp
8摄狱、支持的模塊類型
Android.bp可以支持android_app脓诡、cc_binary、cc_binary_host等多種類型媒役,具體如下圖:
9祝谚、支持預(yù)編譯類型
Android.bp可以支持5種預(yù)編譯類型,如下圖所示:
10酣衷、模塊名稱解析
soong提供了可以在不同目錄中配置相同的模塊名稱交惯,只要每個(gè)模塊的名稱在不同的命令空間中聲明。
soong_namespace{
? ? imports: ["path/to/otherNamespace1","path/to/otherNamespace2"],
}
11穿仪、條件式編譯
cc_library{
? ? ...
? ? srcs: ["generic.cpp"],
? ? arch: {
? ? ? ? arm: {
? ? ? ? ? ? srcs: ["arm.cpp"],
? ? ? ? },
? ? ? ? x86: {
? ? ? ? ? ? srcs: ["x86.cpp"],
? ? ? ? },
? ? },
}