配套系列教学视频链接:
说明
系统:AOSP Android10.0
设备:Android x86模拟器
前言
由于make在编译时表现出效率不够高、增量编译速度慢等问题,Google在android 7.0版本引进了编译速度更快的soong来替代make。最开始,Ninja 是用于Chromium 浏览器中,Ninja 其实就是一个编译系统,类似make ,使用Ninja 主要目的就是因为其编译速度快, 本章节重点介绍Android.bp相关语法。
一, 介绍
Android 7.0之后希望用Android.bp替换Android.mk,bp简单的配置更方便Ninja文件的产生,而Blueprint和Soong 就此产生。Soong则是专为Android编译而设计的工具,Blueprint只是解析文件的形式,而Soong则解释内容的含义,最终将Android.bp转换成Ninja文件。 Blueprint和Soong都是由Golang写的项目。 从Android Nougat开始,prebuilts/go/目录下新增了Golang所需的运行环境,在编译时使用。
Android.mk可以引用Android.bp中的模块,反之Android.bp不能引用Android.mk中的模块, 以下显示为各个工具的关系图:
二,语法
官方参考:
https://android.googlesource.com/platform/build/soong/+/refs/heads/master/README.md
https://source.android.com/setup/build
Android.bp 文件很简单。它们不包含任何条件语句,也不包含控制流语句;每一个模块以模块类型开始,后面跟着一组模块的属性,以名值对(name: value)表示,类似JSON语句,每个模块都必须有一个name属性. 其属性值必须是全局唯一的,基本格式如下:
[module type] {
name: "[name value]",
[property1 name]:"[property1 value]",
[property2 name]:"[property2 value]",
}
最简单的Android.mk和Android.bp比对:
| LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_CFLAGS+=-Wno-error\ -Wno-unused-parameter LOCAL_SRC_FILES := main.c LOCAL_MODULE := hello_test include $(BUILD_EXECUTABLE) |
cc_binary { cflags: [ "-Wno-error", "-Wno-unused-parameter", ], srcs: ["main.c"], name: "hello_test", } |
Soong系统其实会提供androidmk命令, 用于将Android.mk转换成Android.bp, 使用如下:
androidmk Android.mk > Android.bp
注意: soong的编译配置文件以.bp结尾,通常命名为Android.bp,但也有少数情况不以Android.bp命名。例如:external/libdrm/Android.sources.bp, frameworks/rs/support.bp。
1,模块
常见模块类型: 在Android源码中
build/soong/androidmk/cmd/androidmk/android.go
var moduleTypes = map[string]string{
"BUILD_SHARED_LIBRARY": "cc_library_shared",
"BUILD_STATIC_LIBRARY": "cc_libr


3364

被折叠的 条评论
为什么被折叠?



