https://www.cnblogs.com/bluestorm/p/10895005.html
Android.bp,是用來替換Android.mk的配置文件。 它使用Blueprint框架來解析,最終轉換成Ninja文件。
與Android.mk不同的是,Android.bp是純粹的配置文件,不包含分支、循環等流程控制,也不能做算數、邏輯運算。 與此同時,Ninja文件也是如此。 這就產生了一些新的問題與需求——在Android項目上進行選擇編譯、解析配置、轉換成Ninja等——Soong應運而生。 Soong其實就相當於Makefile編譯系統的核心,即build/make/core/
下面的內容。 它負責提供Android.bp的含義定義與解析,並將之轉換為Ninja文件。。
Blueprint和Soong都是由Golang寫的項目。 從Android Nougat開始,prebuilts/go/
目錄下新增了Golang所需的運行環境,在編譯時使用。
Android.bp以及相關支持,從Android Nougat開始加入,從Android Oreo(8.0)開始默認開啟。 如果需要在Android Nougat的版本使用,需要在執行編譯時添加變量。
Android.mk轉換Android.bp實例
下面,以一個AOSP上的簡單模塊,system/core/sdcard/Android.mk
,來做為案例。
-
LOCAL_PATH := $(call my-dir)
-
-
include $(CLEAR_VARS)
-
-
LOCAL_SRC_FILES := sdcard.cpp fuse.cpp
-
LOCAL_MODULE := sdcard
-
LOCAL_CFLAGS := -Wall -Wno-unused-parameter -Werror
-
LOCAL_SHARED_LIBRARIES := libbase libcutils libminijail libpackagelistparser
-
-
LOCAL_SANITIZE := integer
-
-
include $(BUILD_EXECUTABLE)
這是一個編譯二進制可執行文件的小模塊,內容非常簡單。 通過執行androidmk Android.mk > Android.bp
,可以轉換成Android.bp。
-
cc_binary {
-
srcs: [
-
"sdcard.cpp",
-
"fuse.cpp",
-
],
-
name: "sdcard",
-
cflags: [
-
"-Wall",
-
"-Wno-unused-parameter",
-
"-Werror",
-
],
-
shared_libs: [
-
"libbase",
-
"libcutils",
-
"libminijail",
-
"libpackagelistparser",
-
],
-
sanitize: {
-
misc_undefined: [ "integer"],
-
},
-
}
可以看出,雖然行數變多,但其實含義更明確了