Android编译系统中的Android.bp
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"],
-
},
-
}
可以看出,虽然行数变多,但其实含义更明确了