文档开发者中心
我的

【综合】安卓Android.bp介绍及资料汇总


作者:HW-LXL

一、Android.bp简介


Android.bp为安卓新增加的模块编译makefile,由blueprint和soong框架支撑,用来替代gnu make格式的Android.mk。Blueprint主要负责编译逻辑,而Soong主要负责分析编译脚本。

Blueprint和Soong由Go语言书写,可在本地搭建Go语言环境调试。

相同点:

常见的编译类型、关键字,具有一一对应的关系。如果已经熟悉Android.mk,再了解关键字的对应关系,理解Android.bp将比较容易。

差异点:

1.Android.bp内部不支持判断语句。

2.Android.mk中简化了同一模块,支持host、target,动态、静态编译的书写方法。

3.Android.bp所控制的模块的编译逻辑现在不由build/core/中的makefile控制,而由blueprint接管,如果要修改编译逻辑,则需要修改blueprint源码。

收益:

1.保证了Android.bp之间的完全解耦。之前的Android.mk实际上是没有完全解耦的。

2.增强了单模块编译功能。之前的单模块编译(mm)经常失败,而Android.bp的相关编译逻辑是完全闭环和解耦的,可保证用最小代价执行单模块编译。

3.简化了Android.mk。之前Android.mk为GNU make的一部分,经常会插入一些不合解耦规范,无法复用的功能。Android.bp将消除这一现象。

参考资料:

1.谷歌官方readme文件(见附件)。

2.$OUT_DIR/soong/.bootstrap/docs/soong_build.html

3.

4.


二、Android.bp例子


拿例子来说明,是最容易被大家接受的,下面以例子作为引导,逐步探讨新编译系统的特性。


2.1 可执行程序reboot

reboot这个bin的bp文件在system/core/reboot/Android.bp,其内容为:


特性1:模块编译类型cc_binary放在了最前,并将整个模块的编译参数使用{}括起来了。

cc_binary对应旧版的$(BUILD_EXECUTABLE)

特性2:模块的编译参数的赋值方法支持以下格式:

特性3:编译参数,Android.bp和Android.mk有对应关系:

LOCAL_SRC_FILES对应srcs,LOCAL_SHARED_LIBRARIES对应shared_libs。

LOCAL_MODULE对应name,LOCAL_CFLAGS对应cflag。

对应的Android.mk如下。其它关键字的对应关系请关注本文最后部分的内容。

特性4:注释

注释有两种类型,“//”和“/* .. */”,其使用方法与C语言完全一致

2.2 库libcutils

文件位于system/core/libcutils/Android.bp,为了突出重点,这里简化部分内容。

特性5:同名的多种编译类型的模块,现在可以写在同一个模块之内了,而不需要反复写好几个模块的Makefile,如旧版本的Android.mk:

2.3 hidl编译

文件位于system/libhidl/transport/base/1.0/Android.bp,该类型的文件可以自动生成,这里的目的为解释一下这类文件的含义。

1.hidl-gen将会解析system/libhidl/transport/base/1.0/IBase.hal,自动生成对应的源文件和头文件。

2.第一个genrule,描述了源文件BaseAll.cpp将会生成到out/soong/.intermediates内的android.hidl.base@1.0_genc++文件夹内。

3.第二个genrule,描述了头文件IBase.h等将会生成到out/soong/.intermediates内的android.hidl.base@1.0_genc++_headers文件夹内

4.第三个cc_library_shared,描述了android.hidl.base@1.0将由以上目录的源文件和头文件生成出来。

其它内容都比较明显,这里不再详述。

三、其它内容

还有一些其它内容,比如如何使用androidmk程序,将Android.mk转化为Android.bp,可以参考我之前写的博客:

这里将其中最重要的两个表格列出来,描述了部分关键的Android.bp和Android.mk的关键字的对应关系:


点赞
收藏
回复
8
分享
举报
浏览1624 发布于2019-11-07 01:33未知归属地
全部评论
最多点赞
最新发布
最早发布

楼主发的帖子很优秀

8楼回复于2019-11-07 03:19 未知归属地

好帖,顶起来

7楼回复于2019-11-07 03:19 未知归属地

感谢楼主分享

6楼回复于2019-11-07 02:31 未知归属地

很详细的解析,必须点赞

5楼回复于2019-11-07 02:30 未知归属地

Android.bp内部不支持判断语句。学习了

4楼回复于2019-11-07 02:11 未知归属地

内容很丰富呦,楼主

3楼回复于2019-11-07 02:10 未知归属地

谢谢楼主分享呦

2楼回复于2019-11-07 02:06 未知归属地

内容介绍的很详细了

1楼回复于2019-11-07 02:06 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。