google很早在为此做准备,要求所有设备能够刷GSI(通用系统镜像),并跑过XTS测试。
动态分区解耦方案如上图。
一、分区描述
单一系统映像 (SSI)。包含system和system_ext图像的新概念图像。当这些分区对于一组目标设备是通用的时,这些设备可以共享 SSI 并跳过构建system和system_ext映像。
system_ext分区。可以使用system资源并且可以包含以下系统模块的新分区:
在system分区中扩展 AOSP 系统模块。我们建议将此类模块上传到 AOSP,以便稍后将它们安装到system分区。
捆绑 OEM 或 SoC 特定模块。我们建议取消捆绑此类模块,以便将它们安装到product或vendor分区。
system分区。用于 OEM 产品的通用系统映像。我们建议将专有模块移出system分区,方法是将它们上游到 AOSP 或将它们移到system_ext分区。
product分区。此分区现在可以使用允许的接口来安装未与任何其他分区捆绑的产品特定模块。
vendor & odm 分区。系统 (SoC) 供应商(vendor)与原始设计制造商 (ODM) 为其特定设备(他们的板)定制片上系统 (SoC) 供应商板支持包 (BSP)。这使他们能够为特定于板的组件、特定于板的守护进程或他们自己在硬件抽象层 (HAL) 上的功能实现内核模块。他们可能还想更换或定制 SoC 组件。
二、project treble架构
https://android-developers.googleblog.com/2017/05/here-comes-treble-modular-base-for.html
在Project Treble中,整体式 Android 分为两部分:特定于硬件的部分(供应商实现)和通用操作系统部分(Android 操作系统框架)。每个软件都安装在单独的分区中:硬件特定软件的供应商分区和通用操作系统软件的系统分区。一个称为供应商接口 ( VINTF ) 的版本化接口在两个分区中定义和实施。通过使用这个分区系统,您可以在不修改供应商分区的情况下修改系统分区,反之亦然。
三、镜像之间的接口
供应商和产品图像的两个主要接口围绕 SSI 存在:
供应商接口 (VINTF) :VINTF 是驻留在供应商和 ODM 映像中的组件的接口。产品和系统镜像中的组件只能通过此接口与供应商和 ODM 镜像进行交互。例如,供应商映像不能依赖于系统映像的私有部分,反之亦然。这最初是在 Project Treble 中定义的,它将图像分成系统和供应商分区。使用以下机制描述接口:
HIDL (直通 HAL 仅适用于system和system_ext模块)
稳定的AIDL
配置
系统属性 API
配置文件架构 API
VNDK
Android SDK API
Java SDK 库
产品界面:产品界面是SSI和产品图片之间的界面。定义一个稳定的接口可以将产品组件与 SSI 中的系统组件分离。产品接口需要与 VINTF 相同的稳定接口。但是,对于搭载 Android 11(及更高版本)的设备,仅强制执行 VNDK 和 Android SDK API。
四、android.bp参数定义
before enforcement代表之前所在域,after enforcement代表配置关键字之后可以所在域使用。