android.bp

android.bp,第1张

引用原文

早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入Android.bp。

Android 7.0引入ninja和kati

Android 8.0使用Android.bp来替换Android.mk,引入Soong

Android 9.0强制使用Android.bp

1.1 模绝枣块

定义一个模块从模块的类型开始,模块有不同的类型,如前面例子中的cc_library_shared,当然类型还有很多种,譬如cc_binary android_app cc_library_static等等。模块包含一些属性格式为“property-name:property-value”,其备梁中name属性必须指定,其属性值必须是并滚拆全局唯一的。

srcs 属性以字符串列表的形式指定用于编译模块的源文件。您可以使用模块引用语法 “:” 来引用生成源文件的其他模块的输出,如 genrule 或 filegroup。

1.2 变量

变量范围限定为声明它们的文件的其余部分,可以使用 “=” 号赋值, 但是不能使用 “:=” 赋值。变量是不可变的,但有一个例外它们可以附上+= 赋值,但仅在变量被引用之前。

1.3 注释

Android.bp使用单行注释//和多行注释/* */两种方式。

1.4类型

具体支持以下几种类型:

1.5 *** 作符

String类型、字符串列表类型和Map类型支持 *** 作符“+”。

1.6 支持模块类型

Android.bp可以支持android_app、cc_binary、cc_binary_host等多种类型,具体定义在Android源码的build/soong/androidmk/cmd/androidmk/android.go

1.7 支持预编译类型

1.8 条件式编译

背景:

不少APP在P上是Android.mk,在10上变成Android.bp,我们在MK的时候需要对其进行转换。

转换方法亏伏:

利用Android自带的工具进行转换

使用自带工具前提:

1.Source full build 过(最好)

2.在out/soong/咐绝host/linux-x86/bin/目录下存在衡空姿androidmk文件。

  如果不存在androidmk文件,使用m -j blueprint_tools命令生成

具体转换方法:

1.cd out/soong/host/linux-x86/bin/

2.执行命令:androidmk <android.mk文件>><android.bp文件>

  例子:

  1.cd out/soong/host/linux-x86/bin/

  2.androidmk ./mk2bp/Android.mk >./mk2bp/Android.bp

  例子中step2说明:

  由于out/soong/host/linux-x86/bin/路径下文件太多,不好识别转换后的文件,所以自己建了个mk2bp文件夹,放要转换的Android.mk。方便查看而已

  至于放Android.mk放哪,随便。

如果遇到内容复杂一点的Android.mk,可能工具转换会出错。待进一步研究。

注意 :关于Android.bp的权威解释可以参见 android.bp权威文档

Google官方语法文档 https://android.googlesource.com/platform/build/soong

从前面的列子可以看出定义一个模块从模块的类型开始,模块有不同的类型,如前面例子中的cc_library_shared,当然类型还有很多种,譬如 cc_binary、android_app 、cc_library_static 等等。模块包含一些属性格式为“property-name:property-value”,其中name属性必须指定,其属性值必须是全局唯一的。

其中默认模块可用于在多个模块中重复相同的属性

srcs 属性以字符串列表的形式指定用于编译模块的源文件。您可以使用模块引用语法 “:” 来引用生成弊衫雀源文件的其他模块的输出,如 genrule 或 filegroup。

实例说明:

我们知道Android.mk中可以定义变量,当然作为新编译系统中替代Android.mk的Android.bp也是一定存在,更加何况Android.mk还可以一定条件的转换成Android.bp。

变量范围限定为声明它们的文件的其余部分,可以使用 “=” 号赋值, 但是不能使用 “:=” 赋值。变量是不可变的,但有一个例外它们可以附上+= 赋值,但仅在变量被引用之前。

下面我们看一下正确使用变量的列子:

我们知道Android.mk中可以进行注释,当然Android.bp里面也可以,塌态Android.mk中使用 # 然后添加注释,Android.bp使用单行注释 // 和多行注释 /* */ 两种方式。

具体支持以下几种类型:

String类型、字符串列表类型和Map类型支持 *** 作符 + 。

Android.bp可以支持android_app、cc_binary、cc_binary_host等多种类型,具体定义在Android源码的 build/soong/androidmk/cmd/androidmk/android.go 可以查看,具体如下:

Android.bp可以支持多种预编译类型,具体定义在Android源码的 build/soong/androidmk/cmd/androidmk/android.go 可以查看,如下图所示:

例如: system/core/libusbhost/Android.bp aosp9.0开始

Android.bp是一门实战性的东西,光说不练没有啥用,说再多不如直接开练来得舒服。那就直接开始手撕实例了,租早让我们开战吗!

下面几种库编译类型:

2.1 动态库类型

最终编译为so包

**2.2 java库类型: **

最终编译为jar包

2.3 Andorid应用类型

最终编译为apk包

转自: https://blog.csdn.net/tkwxty/article/details/104395820


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12125395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存