昨天,谷歌发布了针对移动设备的下一个操作系统更新。 Android 10的主要创新之一是“ Project Mainline”。 我将尝试弄清楚它是什么,为什么以及如何工作。
多年来,Google一直在尝试解决Android上的安全更新问题。 目前,Android已安装在数十亿台设备上,但是大多数制造商都不愿意在发布后支持这些设备。 这导致以下事实:正在运行的许多设备上安装了具有已知漏洞的版本。
简化Android更新的第一步是“ Project Treble”,它将Android分为两个部分:硬件相关和独立。 这促进了对新版本Android的更新的发布。 下一步是Mainline项目。 它允许您更新操作系统的各个组件,而无需更新整个系统,这与更新应用程序类似。
为什么需要这个?
在Android体系结构中,操作系统(通常称为固件)与用户数据和应用程序紧密隔离。 它位于闪存的单独部分中,是只读的,并且在最新版本的Android中经过数字签名以进行完整性控制。 对于属于操作系统一部分的Android应用程序,可以通过在用户的“内存”部分中放置新版本的应用程序来进行更新。 例如在Linux发行版中,不可能使用软件包管理器来更新操作系统的其他部分(服务,库等)。 为了进行此类更正,制造商被迫发布整个系统的更新。 同时,在使用Google移动服务(绝大多数设备都在使用它们)时,每个更新都需要经过Google的认证。 “项目主线”解决了这个问题,现在系统组件可以像Android应用程序一样单独进行更新。 除了安全更新外,它还简化了系统设置和数据(例如时区(tzdata))的更新。
如何运作
Project Mainline的核心是APEX系统应用程序的新容器(Android Pony EXpress的缩写)。
在Android 10中,Google识别了系统中的13个APEX软件包,这些软件包可以独立更新:
- 安全性:媒体编解码器,媒体框架组件,DNS解析器,Conscrypt
- 隐私:文档UI,权限控制器,ExtServices
- 一致性:时区数据,ANGLE(开发人员选择加入),模块元数据,网络组件,强制门户登录,网络权限配置
可以使用“程序包安装程序”,adb或Google Play,以类似于APK的方式安装APEX程序包。
顶点
APEX文件类似于用于Andoird APK应用程序的文件。
APEX是一个zip归档文件,其中包含4个主要文件:
- apex_manifest.json-包含软件包的名称及其版本;
- AndroidManifest.xml-包元数据(类似于APK);
- apex_payload.img-ext4文件系统的映像;
- apex_pubkey-用于验证图像签名的公共密钥。
APEX管理器系统服务(apexd)与APEX软件包一起使用。
Apex经理
- 程序包安装程序确定它是APEX程序包后,将其传递给APEX管理器。
- APEX管理器检查软件包及其版本。
- 如果检查通过,则将其解压缩到内存的用户部分,更新其数据库中的记录并重新启动设备。
- 当APEX启动时,管理器从数据库中检查所有软件包,为ext4映像创建一个循环设备,并将其沿着路径/顶点/名称@ ver挂载。
在APEX软件包中的图像内,可能有:
- 可执行文件
- 共享(.so)库
- JAR库,
- 资料档案
- 配置文件。
签名APEX套餐
APEX数据包使用两个不同的密钥进行了两次签名。 使用一个密钥对ext4映像进行签名(使用dm-verity,如Android验证启动一样),使用第二个密钥对APEX软件包(zip文件)进行签名,类似于APK软件包。
Linux内核
APEX使用许多Linux内核机制,例如循环设备,DM-verity。
内核版本4.4及更高版本支持APEX。 对于使用旧版本内核的设备,仅支持“平面”模式,该模式不支持更新。
参考文献:
android.googlesource.com/platform/system/apex/+/refs/heads/master/docs/README.mdandroid-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html