Android 10中的项目主线

昨天,谷歌发布了针对移动设备的下一个操作系统更新。 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.md
android-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html

Source: https://habr.com/ru/post/zh-CN466211/


All Articles