Meta 将 Cuttlefish Android 虚拟设备框架移植到 Apple 芯片 Mac

Published · AI Daily — AI-assisted deep research, methodology & disclosure

Meta Reality Labs 把 AOSP 的虚拟设备框架 Cuttlefish 移植到 macOS 和 Apple 芯片,改动涉及 QEMU 的 vhost-user、HVF 内存跟踪、原生 Cocoa 显示以及构建与签名。成果以 QEMU 分支和补丁集发布。

Meta 把 Cuttlefish 带到 Apple 芯片 Mac 上

2026 年 11 月 13 日,Meta 工程博客介绍了 Reality Labs 如何把 Cuttlefish 移植到 macOS 和 Apple 芯片上原生运行。Cuttlefish 是 Android 开源项目 AOSP 的虚拟设备框架。文章作者是 Hadrien Zalek、Joe Knox、Alex Chong 和 Marcel Apfelbaum。Reality Labs 制造 AI 眼镜等产品,用模拟器来扩大开发和测试规模,不必依赖稀缺的真机。需要说明的是,这不是 Google 或 AOSP 的官方发布。Meta 以 QEMU 分支和补丁集的形式提供,并表示仍在探索如何把改动贡献回上游。

为什么 Meta 想统一成一个平台

测试非手机类的 Android 设备,关键在于虚拟设备能多接近真实产品的软件行为。Goldfish 这类轻量模拟器能解决一部分问题,但与真机的差异会让缺陷拖到开发后期才暴露。Cuttlefish 启动的系统镜像与真机相同,并在虚拟硬件上运行接近真实的软件栈,因此更贴近实体设备。问题在于 Cuttlefish 只支持 Linux,而 Meta 的应用和库开发者用的是搭载 Apple 芯片的 Mac。于是 Meta 不得不同时维护 Goldfish 和 Cuttlefish。文章说,这耗费了计算资源,让开发者困惑,拖慢了模拟器团队,还要求每个工具都支持两个平台。文章也指出,AOSP 本身就是这样划分的:Goldfish 面向应用开发者,Cuttlefish 面向平台开发者。

macOS 上的三个缺口

Cuttlefish 是编排层,真正运行客户机操作系统的是虚拟机监控器。在 Linux 上,Cuttlefish 通常使用 crosvm,过去也支持把 QEMU 作为备选,但这部分集成后来已不再活跃。为了在 Apple 芯片上原生运行,Meta 重新启用了 QEMU 支持。Cuttlefish 的许多虚拟设备使用 vhost-user 后端,也就是通过套接字向 QEMU 提供 virtio 设备的独立进程。这套设计的很大一部分默认运行在 Linux 上。在 macOS 上有三处假设失效:vhost-user 相关代码被限定在 Linux,无法构建和运行;苹果的虚拟化框架带来了 QEMU 未预料的资源限制;原生的显示、构建和签名路径根本不存在。

Meta 做了哪些改动

最重要的改动在 QEMU 的 vhost-user 路径上。前端、libvhost-user 以及 vhost-user-blk 等 contrib 后端原本都限定在 Linux。Meta 放宽了这些构建限制,使它们也能在 macOS 上构建,让 Cuttlefish 的设备后端在 Mac 上像在 Linux 上一样把工作交给 QEMU。在 Apple 芯片上,QEMU 通过 Hypervisor.framework,即 HVF,而不是 KVM 来加速。HVF 后端对较大的 Cuttlefish 配置跟踪的内存区域不够,Meta 因此提高了它的跟踪槽数量。

显示方面,Meta 改用 QEMU 原生的 Cocoa 显示,而不再依赖 WebRTC 界面。改动包括:支持 BGRA 像素格式以消除显示瑕疵,把鼠标点击转换成触摸输入,以及通过 -g 参数提供自定义显示尺寸。Meta 还启用了不稳定的 Rutabaga 结构,以匹配 gfxstream 和 rutabaga 配置中 Rust 侧的图形 ABI。最后是构建和打包工作:Darwin 构建支持、在 macOS 上为 arm64 构建 QEMU、工具链修复、JIT 授权,以及代码签名和公证。在 Cuttlefish 一侧,Meta 增加了 macOS 宿主机支持,让编排层可以在 Mac 上构建和运行。

Meta 报告的收益

Meta 称,统一到一个平台后,维护工作量减少,基础设施需求下降,冗余工具被淘汰,保真度提高,开发者运行的虚拟设备也与持续集成中使用的完全一致。单一平台还让蓝牙配对、Wi-Fi、蜂窝网络、三维图形、空中升级测试、Fastboot 以及用于持续集成和开发的快照更容易支持。这些都是 Meta 自己的说法,文章没有给出基准测试、成本数字或实测的保真度得分。Meta 还说,同一个虚拟设备也提供给为其生态开发的外部开发者,所以第三方团队测试时使用的,正是 Meta 用来验证自家操作系统的平台。

文章还提出了一个关于 AI 智能体的论点。随着智能体在 Android 开发中的作用越来越大,验证代码如何运行与生成代码同样重要。虚拟设备让工程师和自动化智能体可以在隔离环境中同时工作,即时重置状态,反复运行测试,而不必共享实体硬件。

如何获取,以及还缺什么

Meta 分两部分发布这项工作。qemu-wearables 仓库是 Meta 维护的 QEMU 分支,包含它的提交。cuttlefish-wearables 仓库是一组补丁文件,附带给 Android 和 AOSP 打补丁的说明。两者都在 GitHub 的 facebookincubator 名下,并包含构建和打补丁的步骤。Meta 感谢 QEMU 与 Cuttlefish 社区,特别是 Stefano Garzarella 实现的 vsock-user,它直接促成了 macOS 集成。

对「全面支持」这个说法要谨慎。文章描述的是一个供 Meta 内部使用、以分支和补丁形式分享的可用移植。它没有说这些改动已合入 QEMU 或 AOSP,也没有列出不支持的功能或已知缺陷。在上游接受之前,任何采用者都得自己打补丁、重新构建,并持续维护这些工作。

Sources

FAQ

Cuttlefish 是什么,Meta 为什么要把它移植到 Mac?

Cuttlefish 是 AOSP 的虚拟设备框架,启动与真机相同的系统镜像,比 Goldfish 更贴近实体设备。它只支持 Linux,而 Meta 开发者用 Apple 芯片 Mac,只好同时维护两套模拟器。移植后统一为一个平台。

这次移植是 Google/AOSP 上游正式版,已经合入 QEMU 或 AOSP 了吗?

不是,也没有。成果以两个 GitHub 仓库发布:Meta 维护的 QEMU 分支 qemu-wearables,以及给 Android 和 AOSP 打补丁的 cuttlefish-wearables。Meta 仍在探索向上游贡献,采用者需自行打补丁并构建。

为了让 Cuttlefish 在 macOS 上运行,Meta 具体改了什么?

主要有三类:放宽 QEMU 中 vhost-user 的 Linux 限制,使其能在 macOS 构建;提高 HVF 后端的内存区域跟踪槽数量;改用原生 Cocoa 显示,并补上 arm64 构建、JIT 授权、代码签名和公证。