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",
],
}

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.官方最全解释

Android.bp Build Docs (android-8.0.0-r9):http://note.qidong.name/demo/soong_build/

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,
},
},
}

Android.bp学习笔记的更多相关文章

  1. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  2. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  3. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  4. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  5. Android 数字签名学习笔记

    Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...

  6. Android:日常学习笔记(9)———探究持久化技术

    Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...

  7. Android:日常学习笔记(9)———探究广播机制

    Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...

  8. Android:日常学习笔记(8)———开发微信聊天界面

    Android:日常学习笔记(8)———开发微信聊天界面 只做Nine-Patch图片 Nine-Patch是一种被特殊处理过的PNG图片,能够指定哪些区域可以被拉升,哪些区域不可以.

  9. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

随机推荐

  1. java中方法内可以调用同一个类中的方法

    在同一个类中,java的普通方法的相互调用,可以使用this+点号+方法名,也可省略this+点号,java编 译器会自动补上.

  2. idea没有错误出现红色波浪线怎么去掉?

    在有波浪线的代码上Alt+Enter,弹出的菜单中第一项的子菜单选择disable inspection

  3. CPU的硬件结构和汇编语言

    (已更正) 这个问题包括CPU的硬件结构和汇编语言的范畴. 这里梳理一下. 首先, 题主"李建国"自问自答的部分说的是正确的, CPU的指令集是软件与CPU这两个层级之间的接口, ...

  4. 《十天学会单片机和C语言编程》

    <十天学会单片机和C语言编程> 大家注意了这个文件只有最新版迅雷可以下载,下面的lesson几就是第几课.点击右键使用迅雷下载. ed2k://|file|[十天学会单片机和C语言编程]. ...

  5. Ansible-playbook的简单使用 [转]

    一. 介绍 ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写.playbook命令根据自上而下的顺序依次执行.同时,playbook开创了很多特性,它可以允许你 ...

  6. openstack网络DVR

    一.DVR描述 分布式路由 二.相关的专业术语 术语名称 术语解释 SNAT 在路由器后(POSTROUTING)将内网的ip地址修改为外网网卡的ip地址,也就是绑定浮动IP和外部通信 DNAT 在路 ...

  7. Problem A 你会定义类吗?

    Description 定义一个类Demo,有构造函数.析构函数和成员函数show(),其中show()根据样例的格式输出具体属性值.该类只有一个int类型的成员. Input 输入只有一个整数,in ...

  8. Nio Bio Netty Tomcat的NIO

    socket():新建一个文件 bind():绑定到端口,第一个参数就是socket()方法产生的文件描述符 listen():确定新建的这个socket是一个服务器,被动等待网络其他进程链接,参数有 ...

  9. 10.3.1 iOS启动画面横屏是怎么回事?

    产生这个问题的原因是编译旧版Delphi建立的项目,二种解决方法: 1.用 10.3.1 重建空工程,再把使用的单元文件重新加进来.这个操作有点麻烦,尤其对于使用单元多的文件,不过,有种方法,就是先把 ...

  10. 【一题多解】Python 字符串逆序

    https://blog.csdn.net/seetheworld518/article/details/46756639 https://blog.csdn.net/together_cz/arti ...