Android 10 根文件系统和编译系统(十八):Android.bp语法

  配套系列教学视频链接:

      安卓系列教程之ROM系统开发-百问100ask


说明

系统: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旗浩QH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值