安卓虚拟化框架(AVF)将出现在即将推出的部分安卓 14 设备上。AVF 于 Android 13 首次在 Pixel 设备上推出,为开发特权应用程序的平台开发人员提供了新的功能。
有了 AVF,我们将更广泛地支持安卓的虚拟化。虚拟化被广泛应用和部署,以隔离工作负载和操作系统。它可以有效地扩展基础设施、测试环境、兼容传统软件、创建虚拟桌面等。
有了 AVF,虚拟机就成了安卓操作系统的核心结构,类似于安卓利用 Linux 进程的方式。开发人员可以灵活选择虚拟机的隔离级别:
-
单向隔离:安卓(主机)可以控制和检查虚拟机的内容。这些虚拟机最常用于沙箱和隔离,使多个操作系统能在同一台机器/设备上运行,由一个操作系统主机(Android)控制和监视所有其他操作系统。
-
双向隔离(隔离虚拟机):Android(主机)和虚拟机(客户机)完全相互隔离。处理或存储敏感数据的开发人员可能会受益于隔离虚拟机。隔离虚拟机具有双向屏障,主机(Android)和虚拟机都无法访问对方,除非通过明确商定的通信渠道。这有两个主要特性:
主机(Android)无法访问虚拟机内的工作负载和数据(保密)。
即使 Android 一直到(包括)主机内核都受到攻击,隔离的虚拟机也不会受到攻击。
AVF 的意义
隔离
有了隔离虚拟机,开发人员现在有了 Trustzone 之外的另一种选择,可用于需要在不升级权限的情况下与 Android 隔离的用例。
便携性
虚拟机及其内部运行的应用程序的可移植性远高于可信 applets。例如,带有 Linux 应用程序有效载荷的基于 Linux 的虚拟机可以在所有支持 AVF 的设备上运行。这意味着开发人员只需构建一次应用程序,就可以将其部署到任何地方。与移植到 Trustzone 操作系统相比,虚拟机还能无缝、轻松地移植基于 Linux 的现有应用程序。
性能
AVF 设计轻巧、高效、灵活。虚拟机可以:
-
根据开发者的需要,小到一个 C 语言程序,大到整个操作系统;
-
做到持续性或间歇性;
-
根据整个系统的健康状况增加或缩小内存;
-
遵循 Android 的调度程序提示和低内存警告。
可扩展性
AVF 在设计时考虑到了开发人员的需求。虚拟机可以定制,以满足特定用例的需求。只要符合 AVF 规定的某些启动和通信协议,开发人员就可以部署任何虚拟机有效载荷。
除了将虚拟化的强大功能引入安卓系统,实现虚拟桌面、沙箱、AVF 使用隔离虚拟机的所有可能性外,还能使以下常见的安卓使用场景(以及更多使用场景)受益:
-
生物识别:通过在隔离的虚拟机中部署生物识别可信 applets,开发人员将获得隔离保证、生物识别算法所需的更多计算能力、与 Trustzone 操作系统无关的轻松更新能力以及更简化的部署。
-
DRM:Widevine 可在安卓设备上实现流式 DRM。一旦部署在隔离的虚拟机中,无论安卓设备上部署的各种Trustzone操作系统的细节如何,Widevine的更新在这些设备上都会变得更加容易。
AVF 使用
AVF 提供了简单的应用程序接口,用于查询设备创建虚拟机的能力及其支持的类型,以及从创建虚拟机的应用程序和服务与这些虚拟机建立安全的通信渠道。
例如,检查 AVF API 的可用性,以及隔离虚拟机和常规虚拟机的可用性:
VirtualMachineManager manager =
(VirtualMachineManager)context.
getSystemService(VirtualMachineManager.class);
if (manager == null) {
// AVF not supported
} else {
int capabilities = manager.getCapabilities();
if ((capabilities & CAPABILITY_PROTECTED_VM) != 0) {
// protected VM is supported
}
if ((capabilities & CAPABILITY_NON_PROTECTED_VM) != 0) {
// non protected VM is supported
}
}
有关 AVF 及其 API 的其他文档,请点击此处查看。
AVF 组件
AVF 由框架 API、Hypervisor 和虚拟机管理器组成。Hypervisor 确保虚拟机(包括 Android)相互隔离,就像 Linux 内核对进程的隔离一样。不过,与 Linux 内核相比,AVF Hypervisor(pKVM)的代码量要小得多(约 50 倍)。
Hypervisor (pKVM)
Hypervisor 侧重于开源可用性、安全性、虚拟机的设备分配以及虚拟机之间的隔离安全。它的攻击面较小,符合较高的安全保证级别。受保护的 KVM Hypervisor(pKVM)完全支持 AVF API 和功能。
pKVM 构建在 Linux 中基于内核的虚拟机(KVM)这一行业标准之上。这意味着所有依赖基于 KVM 的虚拟机的现有操作系统和工作负载都能通过 pKVM 在安卓设备上无缝运行。
虚拟机管理器 (crosvm)
crosvm 是基于 Rust 的虚拟机管理器(VMM),是 Hypervisor 与 AVF 框架之间的桥梁。它负责创建、管理和销毁虚拟机。此外,它还提供了一个跨多个 Hypervisor 实现的抽象层。
隔离虚拟机
隔离的虚拟机对 Android 来说是不可见的,即在 Android 中运行的任何进程都无法检查、查看或篡改此类虚拟机的内容。这一保证由 Hypervisor 提供。
虚拟机
虚拟机与隔离的虚拟机相同,只是拥有正确权限的 Android 进程可以访问虚拟机。
Microdroid
Microdroid 是一个经过精简的 Android 操作系统软件包,可作为启动虚拟机(VM)的模板。它为开发人员在虚拟机中构建和运行工作负载提供了熟悉的环境。Microdroid 使用熟悉的 Android 工具和库,如 Bionic、Binder IPC 和 keystore 支持。
虚拟化服务
VirtualizationService 管理所有客户虚拟机(无论是否隔离)。它主要通过管理 crosvm 实例来实现。它还公开了 AIDL API,系统服务或特权应用程序可使用该 API 启动、监控和停止虚拟机。
RpcBinder
RpcBinder 是为 Android 界面定义语言(AIDL)开发的全新后端。RpcBinder 可使用现有的 binder 线协议与虚拟机进行通信。这意味着:
-
开发人员可以使用他们已经熟悉的语言和基础架构(AIDL)编写虚拟机接口。
-
只需继续使用现有的 AIDL 接口,即使绑定端点转移到虚拟机中也是如此。
Android 14 有哪些新功能?
安卓 14 不仅使 AVF 可以在更多设备上使用,还提供了一个新的工具包,使用户可以使用 AVF 及其组件构建更多内容:
-
用于 AVF 的安卓系统应用程序接口
特权应用程序现在可以使用虚拟机来执行需要隔离的关键工作负载;
-
Hypervisor DevEx 工具包
添加了跟踪功能、改进的可调试性和监控功能,以提供洞察力并协助平台开发人员在隔离虚拟机内进行开发;
-
Hypervisor 供应商模块
通过供应商模块扩展,我们的合作伙伴可以定制谷歌的 pKVM,以满足他们的特定需求,实现差异化;
-
改善系统健康
安卓 14 中,基于 microdroid 的虚拟机启动速度比安卓 13 快 2 倍,而内存使用量却只有安卓 13 的一半。
AVF 框架的其它部分可让 Android 服务和应用程序轻松使用虚拟化。例如,使用 AIDL 作为传输层抽象虚拟机之间的通信,管理虚拟机生命周期或虚拟机的创建方式。
原文链接:https://android-developers.googleblog.com/2023/12/virtual-machines-as-core-android-primitive.html
Posted by Sandeep Patil – Principal Software Engineer, and Irene Ang – Product Manager