https://www.cnblogs.com/linhaostudy/archive/2020/02/25/12361659.htmlhtml
Android.bp是用來替換Android.mk的配置文件,它使用Blueprint框架來解析。Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong則是專爲Android編譯而設計的工具,Blueprint只是解析文件的形式,而Soong則解釋內容的含義,最終轉換成Ninja文件。android
定義一個模塊從模塊的類型開始,模塊有不一樣的類型,以下例子中的「cc_binary」,模塊包含一些屬性格式爲「property-name:app
property-value」,其中name屬性必須指定,其屬性值必須是全局惟一的。框架
cc_binary{ name: "gzip", srcs: ["src/test/minigzip.c"], shared_libs: ["libz"], stl: "none", }
默認模塊「cc_defaults」的用法以下。工具
cc_defaults{ name: "gzip_defaults", shared_libs: ["libz"], stl: "none", } cc_binary{ name: "gzip", defaults: ["gzip_defaults"], srcs: ["src/test/minigzip.c"], }
變量賦值能夠經過「=」號賦值。ui
gzip_srcs = ["src/test/minigzip.c"], cc_binary { name: "gzip", srcs: gzip_srcs, shared_libs: ["libz"], stl: "none", }
註釋包括單行註釋//和多行註釋/* */。
具體支持如下幾種類型:spa
Bool(`true` or `false`) Integers(`int`) Strings(`"string"`) Listsof strings (`["string1", "string2"]`) Maps(`{key1: "value1", key2: ["value2"]}`)
String類型、字符串列表類型和Map類型支持操做符「+」。設計
bpfmt是一個bp文件的格式控制工具,包括4個空格的縮進、列表有多個元素時每一個元素一行、列表和map的最後一個元素多一個冗餘的逗號等等。工具目錄爲:build/blueprint/bpfmt/code
在當前目錄下執行如下命令:htm
androidmk工具能夠把mk文件轉換爲bp文件,但一些複雜的用法和自定義的規則須要手動轉換。工具目錄爲:build/soong/androidmk/
androidmkAndroid.mk>Android.bp
Android.bp能夠支持android_app、cc_binary、cc_binary_host等多種類型,具體以下圖:
Android.bp能夠支持5種預編譯類型,以下圖所示:
soong提供了能夠在不一樣目錄中配置相同的模塊名稱,只要每一個模塊的名稱在不一樣的命令空間中聲明。
soong_namespace{ imports: ["path/to/otherNamespace1","path/to/otherNamespace2"], }
cc_library{ ... srcs: ["generic.cpp"], arch: { arm: { srcs: ["arm.cpp"], }, x86: { srcs: ["x86.cpp"], }, }, }