Mac 上的 Cuttlefish:在 Apple Silicon 上原生运行 Android 虚拟设备框架

Mac 上的 Cuttlefish:在 Apple Silicon 上原生运行 Android 虚拟设备框架

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

Meta Reality Labs 将 Android 虚拟设备框架 Cuttlefish 及其 QEMU 后端移植到 macOS 和 Apple Silicon。此前 Cuttlefish 仅支持 Linux,开发者需同时维护 Goldfish 和 Cuttlefish 两套模拟器,导致资源分散、保真度不足。团队恢复了 QEMU 支持,使 vhost-user 可在 macOS 上构建,扩展了 HVF 内存槽位,并加入原生 Cocoa 显示、构建与签名支持。统一平台后降低了维护成本,提升了测试保真度,并与外部开发者共享同一虚拟设备。相关代码以 qemu-wearables 和 cuttlefish-wearables 形式开源。

🔎

延伸解读

移植的关键不在界面,而在 vhost-user 与 HVF

文章把 macOS 适配的难点归为三处:vhost-user 机制原本被限定在 Linux 上,无法在 macOS 构建运行;Apple 的 Hypervisor.framework 对资源有限制,QEMU 的 HVF 后端内存槽位不够;原生显示、构建与签名路径缺失。团队逐一解决,其中放宽 vhost-user 前端与库的构建限制最为结构性,否则 Cuttlefish 赖以提供高保真设备模型的后端无法在 Mac 上工作。

统一平台的实际收益:保真度与 CI 一致性

此前 Reality Labs 同时维护 Goldfish 和 Cuttlefish,工具要支持两套平台,基础设施与工程能力被分散,开发者还得按工作方式二选一。迁移到单一 Cuttlefish 平台后,维护需求和基础设施需求下降,冗余工具被消除,开发者运行的虚拟设备与 CI 中使用的完全一致。文章还列出蓝牙、Wi-Fi、蜂窝、3D 图形、OTA 更新测试、Fastboot 和快照等能力因此更容易在共享栈上支持。

对外部开发者的意义与当前获取方式

这套虚拟设备不只服务 Reality Labs 内部工程师,也共享给为其生态开发的外部团队,使第三方测试的平台与 Meta 开发和验证 OS 所用的平台一致。文章提到 AI 代理在 Android 开发中角色增强,虚拟设备可让工程师与自动化代理在隔离环境中并发运行,并通过即时状态重置和重复测试减少对共享物理硬件的依赖。代码以 qemu-wearables 和 cuttlefish-wearables 两部分开源,上游贡献仍在探索中。

❓

Q&A

Meta 为什么要把 Cuttlefish 移植到 macOS 和 Apple Silicon?

因为 Cuttlefish 此前只支持 Linux,而 Reality Labs 的应用和库开发者使用 Apple Silicon Mac,被迫同时维护 Goldfish 和 Cuttlefish 两套模拟器,造成资源分散、开发者困惑和维护负担。统一到 Cuttlefish 平台后,所有开发者都能使用同一个高保真虚拟设备。

Cuttlefish 和 Goldfish 有什么区别?

Goldfish 是轻量级模拟器,可在多平台运行但保真度较低,与真实设备的差异可能隐藏 bug;Cuttlefish 是 AOSP 的虚拟设备框架,启动与真实硬件相同的系统镜像并运行真实软件栈,能更贴近物理设备行为,但此前仅支持 Linux。

在 macOS 上运行 Cuttlefish 主要解决了哪些技术障碍?

主要解决三方面:一是让 vhost-user 前端和库不再局限于 Linux,可在 macOS 上构建;二是扩展 QEMU HVF 后端的内存区域跟踪槽位,以适应更大的 Cuttlefish 配置;三是加入原生 Cocoa 显示、构建与代码签名支持,包括 BGRA 像素格式、鼠标点击模拟触摸和自定义几何选项。

Cuttlefish 在 Mac 上如何实现显示和交互?

团队改用 QEMU 原生的 Cocoa 显示,使开发者可直接查看和操作虚拟设备,不再依赖 WebRTC 接口。具体包括支持 BGRA 像素格式以消除 Apple Silicon 上的显示伪影、将鼠标点击转换为触摸输入,以及通过 -g 标志配置显示几何。

统一到 Cuttlefish 平台后带来了哪些好处?

降低了维护需求与基础设施成本,消除了冗余工具,提升了测试保真度,并确保开发者使用与 CI 完全相同的 Cuttlefish 虚拟设备。共享栈还便于支持蓝牙、Wi-Fi、蜂窝、3D 图形、OTA 更新测试、Fastboot 和快照等功能。

Meta 如何向社区开源这项工作?

Meta 以两部分发布:qemu-wearables 是 Meta 维护的 QEMU 分支,包含其提交;cuttlefish-wearables 是一组补丁文件及打补丁说明,用于修改 Android/AOSP。仓库中包含 QEMU 改动、Cuttlefish 补丁系列以及构建和打补丁说明,同时也在探索向上游 QEMU 和 AOSP 贡献。

🏷️

标签

➡️

继续阅读