[Android 基础] -- 理解 Android.bp

本文转自于:http://gityuan.com/2018/06/02/android-bp/

介绍 Android 最新的编译系统

一、简介

早期的 Android 系统都是采用 Android.mk 的配置来编译源码,从 Android 7。0 开始引入 Android.bp。很明显 Android.bp 的出现就是为了替换掉 Android.mk。

再来说一说跟着 Android 版本相应的发展演变过程

  • Android 7.0 引入 ninja 和 kati;
  • Android 8.0 使用 Android.bp 来替换 Android.mk,引入 Soong;
  • Android 9.0 强制使用 Android.bp;

转换关系图如下:

通过 Kati 将 Android.mk 转换成 ninja 格式的文件,通过 Blueprint + Soong 将 Android.bp 转换成 ninja 格式的文件,通过 androidmk 将 Android.mk 转换成 Android.bp,但针对没有分支、循环等流程控制的 Android.mk 才有效。

这里涉及到 Ninja,Kati,Soong,bp 概念,接下来分别简单介绍一下。

1、Ninja

Ninja 是一个编译框架,会根据相应的 ninga 根式的配置文件进行编译,但是 ninja 文件一般不会手动修改,而是通过将 Android.bp 文件转换成 ninja 格式文件来编译。

2、Android.bp

Android.bp 的出现就是为了替换 Android.mk 文件。bp 跟 mk 文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过 Go 语言编写。

3、Soong

Soong 类似于之前的 Makefile 编译系统的核心,负责提供 Android.bp 语义解析,并将之转换成 Ninja 文件。Soong 还会编译生成一个 android 命令,用于将 Android.mk 文件转换成 Android.bp 文件,不过这个转换功能仅限于灭有分支、循环等流程控制的 Android.mk 才有效。

4、Blueprint

Blueprint 是生成、解析 Android.bp 的工具,是 Soong 的一部分。Soong 负责 Android 编译而设计的工具,而 Blueprint 只是解析文件格式,Soong 解析文件的内容含义。Blueprint 和 Soong 都是由 Golang 写的项目,从 Android 7.0,prebuilts/go/ 目录下新增 Golang 所需的运行环境,在编译时使用。

5、Kati

kati 是专为 Android 开发的一个基于 Golang 和 C++ 的工具,主要功能是把 Android 中的 Android.mk 文件转换为 Ninja 文件。代码路径是 build/kati/,编译后的产物是 ckati。

二、Android.bp 语法

Android.bp 是一种纯粹的配置文件,设计简单,没有条件判断或控制流语句,采用的 Go 语言编写控制逻辑。

Android.bp 文件记录着模块信息,每一个模块以模块类型开始,后面跟着一组模块的属性,以名值对(name:value)表示,每个模块都必须有一个 name 属性。基本格式,以 frameworks/base/services/Android.bp 文件为例:

java_library {
    name: "services",

    dex_preopt: {
        app_image: true,
        profile: "art-profile",
    },

    srcs: [
        "java/**/*.java",
    ],

    static_libs: [
        "services.core",
        "services.accessibility",
        "services.appwidget",
        "services.autofill",
        "services.backup",
        "services.companion",
        "services.coverage",
        "services.devicepolicy",
        "services.midi",
        "services.net",
        "services.print",
        "services.restrictions",
        "services.usage",
        "services.usb",
        "services.voiceinteraction",
        "android.hidl.base-V1.0-java",
    ],

    libs: [
        "android.hidl.manager-V1.0-java",
        "miuisdk",
        "miuisystemsdk"
    ],

}

cc_library_shared {
    name: "libandroid_servers",
    defaults: ["libservices.core-libs"],
    whole_static_libs: ["libservices.core"],
}

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值