早期的Android系統都是采用Android.mk的配置來編譯源碼,從Android 7.0開始引入Android.bp。
Android 7.0引入ninja和kati
Android 8.0使用Android.bp來替換Android.mk,引入Soong
Android 9.0強制使用Android.bp
1.1 模塊
定義壹個模塊從模塊的類型開始,模塊有不同的類型,如前面例子中的cc_library_shared,當然類型還有很多種,譬如cc_binary android_app cc_library_static等等。模塊包含壹些屬性格式為“property-name:property-value”,其中name屬性必須指定,其屬性值必須是全局唯壹的。
srcs 屬性以字符串列表的形式指定用於編譯模塊的源文件。您可以使用模塊引用語法 “:” 來引用生成源文件的其他模塊的輸出,如 genrule 或 filegroup。
1.2 變量
變量範圍限定為聲明它們的文件的其余部分,可以使用 “=” 號賦值, 但是不能使用 “:=” 賦值。變量是不可變的,但有壹個例外它們可以附上+= 賦值,但僅在變量被引用之前。
1.3 註釋
Android.bp使用單行註釋//和多行註釋/* */兩種方式。
1.4類型
具體支持以下幾種類型:
1.5 操作符
String類型、字符串列表類型和Map類型支持操作符“+”。
1.6 支持模塊類型
Android.bp可以支持android_app、cc_binary、cc_binary_host等多種類型,具體定義在Android源碼的build/soong/androidmk/cmd/androidmk/android.go
1.7 支持預編譯類型
1.8 條件式編譯