Android.bp学习笔记
1.Android.bp简介
Android 7.0之后希望⽤Android.bp替换Android.mk,bp简单的配置更⽅便Ninja ⽂件的产⽣,⽽Blueprint和Soong 就此产⽣。Android 利⽤Blueprint和Soong 来解析bp⽂件,经过最终转换为ninja files。 Blueprint和Soong都是由Golang写的项⽬。从Android Nougat开
始,prebuilts/go/ ⽬录下新增了Golang所需的运⾏环境,在编译时使⽤。Android.bp以及相关⽀持,从Android Nougat开始加⼊,从Android Oreo(8.0)开始默认开启。如果需要在Android Nougat的版本使⽤,需要在执⾏编译时添加变量: make 'USE_SOONG=true' Soong是以前Android基于make的编译系统的替代品。它以Android.bp⽂件替代Android.mk,Android.bp⽂件⽤类似JSON的简洁声明来描述需要构建的模块。
2.例⼦1
cc_binary {            //编译成可执⾏⽂件,cc_library_shared编译成动态库
name: "bt_test",    //编译出的可执⾏⽂件的名字为bt_test
vendor: true,      //编译出来放在/vendor⽬录下(默认是放在/system⽬录下)
srcs: ["bt_test.cpp"], //源⽂件,格式["a.cpp", "b.cpp"]
cflags: [
"-Wall",
"-Werror",
"-Wno-unused-parameter",
],                    //编译flag
include_dirs: [
"hardware/interfaces/halnode/1.0/default",    //⽤户值定的头⽂件查路径
],
shared_libs: [      //编译依赖的动态库
"liblog",
"libutils",
"libhidltransport",
"android.hardware.halnode@1.0",
"libhidlbase",
"libbase",
],
}
android学习教程
2.其它可⽤选项
subdirs = ["ndk"]   //指定进⼊下层ndk⽬录进⾏编译
export_include_dirs: [   //从其他模块添加头⽂件检索路径  "include",  "include/camera" ],
export_shared_lib_headers: ["libcamera_metadata"],
local_include_dirs: ["aidl"],   //如果从当前⽬录添加路径时使⽤,将./aidl⽬录加⼊头⽂件的搜索路径
static_libs: ["libupdater"],   //指定对库libupdater进⾏静态链接  static_executable: true,
4.官⽅最全解释
5.变量
Android.bp⽂件可包含顶级变量赋值:
test_srcs = ["src/test.c"],
cc_binary {
name: "test",
srcs: test_srcs,
}
变量范围限定为声明它们的⽂件的其余部分,以及任何⼦蓝图⽂件。变量是不可变的,但有⼀个例外 —— 它们可以附上+= 赋值,但仅在变量被引⽤之前。
6.注释
注释⽅式,与Golang类似。⽀持⾏注释//与块注释/* block */。
7.操作符
除了赋值的 = 以外,只有 + 。
8.默认模块
默认模块可⽤于在多个模块中重复相同的属性。
cc_defaults {
name: "test_defaults",
shared_libs: ["libz"],
stl: "none",
}
cc_binary {
name: "test1",
defaults: ["test_defaults"],
srcs: ["src/test/test1.c"],
}
9.常⽤⼯具
(1)bpfmt ⼀个是格式化⼯具bpfmt。与gofmt类似,可以格式化Blueprint⽂件。(其实,代码基本上都是从gofmt复制⽽来。)eg 格式化当前⽬录及其递归⼦⽬录下的所有Android.bp: # bpfmt -w .
(2)androidmk 另⼀个是androidmk,负责转换Android.mk为Android.bp, eg: # androidmk Android.mk > Android.bp
10.⼯具链关系
Android.mk、Android.bp、Soong、Blueprint、Ninja 简单的⽅式表达这⼏个概念之间的作⽤关系
Android.bp --> Blueprint --> Soong --> Ninja
Makefile or Android.mk --> kati --> Ninja  Android.mk --> Soong --> Blueprint --> Android.bp
11.针对不同系统进⾏编译
system/core/libusbhost$ cat Android.bp
cc_library {
name: "libusbhost",
vendor_available: true,
vndk: {
enabled: true,
},
host_supported: true,
srcs: ["usbhost.c"],
cflags: ["-Werror"],
export_include_dirs: ["include"],
target: {
android: {    //编译Android上运⾏的程序
cflags: [
"-g",
"-DUSE_LIBLOG",
],
shared_libs: ["liblog"],
},
darwin: {    //编译darwin上运⾏的程序
enabled: false,
},
},
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。