Android.bp 和 Android.mk 的区别

May*_*shG 8 android build-system

在 Android O 框架代码中,我们可以看到 Android.bp 和 Android.mk 文件。这两个文件需要什么?根据文档 .bp 文件用于 soong 构建系统。当我们进行构建时,将执行哪个文件?.mk 还是 .bp?

f9c*_*534 11

Soong是 Android 的构建系统,旨在替代旧的基于 make 的构建系统。Soong 读取Android.bp文件,这些文件以类似 Bazel 的语法定义模块。Soong 本身是在Blueprint框架之上用 Go 编写的,而Blueprint框架又使用Ninja作为后端。Ninja 旨在提高效率,尤其是对于增量构建。

因为 Android 是一个大项目,所以迁移到 Soong/Android.bp需要一些时间。在过渡期间,两种格式都支持,Soong forAndroid.bpKati for Android.mk。标准构建将同时运行两者。Android.mk文件中的模块可以依赖于文件中的模块Android.bp,但不能相反。

的一个重要区别Android.bp是没有显式的 if 语句来提高性能。尽管Android.mk文件可以包含ifeq对任意环境变量的检查,但该Android.bp格式仅允许区分预定义的情况,例如处理器架构或调试/发布版本(参考)。自定义大小写区别必须在 Go 中单独定义(参考)。

由于设计差异,Android.mkto 的自动转换Android.bp是不可行的,尽管有一个名为androidmk的工具可以将简单的 Android.mk文件(例如没有 if 语句)转换为Android.bp.