Android apps and games on your Mac, each in its own window.
Free and open source, for Macs with Apple silicon.
Website · Releases · Architecture · Engine · For game developers · Changelog
Avo runs a small Android system in the background and shows every Android app as a regular Mac app: its own window and Dock icon, Launchpad and Spotlight entries, ⌘Tab, notifications in Notification Center, a shared clipboard, links that open in your Mac's browser, and drag and drop from Finder. Games get keyboard, mouse and controller support, including a shooter mode with mouse-look.
Under the hood Avo boots an unmodified AOSP image (Android 17, Cuttlefish) in its own virtual machine on Apple's Hypervisor.framework, and draws it on your Mac's GPU through gfxstream and Metal.
Avo 1.0 is out. Its releases on GitHub Releases are signed with a Developer ID and notarized, and from 1.0 on they update themselves. Avo is still under active development: please report problems you run into.
Apps as Mac apps
- One window per Android app, with its own Dock icon, Launchpad and Spotlight entries; full screen with the menu bar and title bar on hover.
- Notifications in Notification Center, with their buttons and Reply right from the banner; what Android plays in Control Center and on the media keys and AirPods; a shared clipboard; Android links open in the Mac's default browser.
- Install
.apk,.xapk,.apkmand.apksfiles (OBB data included) by double-clicking, dropping them on Avo, or from Google Play. - Android follows the Mac: dark mode, time zone, 24-hour clock, language and battery level.
- Screen translation (⌘⇧T), screenshots and screen recordings with sound, Keep on Top and Picture in Picture, and a shake of the phone for apps that listen for one.
- A shared folder between the Mac and Android, location from the Mac (or a place or route you choose), the Mac's microphone, and mock fingerprints for apps that ask for one.
Games
- Key mapping: put keys on a game's touch controls, with templates for shooters, MOBAs and racing games; profiles can be shared. Modes switch the layout with the game (on foot, in a vehicle), and one key may press several buttons.
- Shooter mode with mouse-look, and full game controller support with a visual controller editor.
- GPU rendering through gfxstream and MoltenVK, a frame-rate cap of 30, 60, 90 or 120 fps (or the display's own rate), render scale and sharpening, and a persistent shader cache.
- Avo adds no auto-aim, macros or other advantages, and does not hide itself from games (details for publishers).
System
- Control Panel with an app library, Settings, and a System Status view of CPU, memory and GPU use per app.
- Menu bar item with quick controls; Android pauses itself when idle and resumes instantly when used.
- Choose the Android version, the device profile apps see, and where Android's data lives (including an external drive).
- Optional Google Play (installed from MindTheGapps on request), ADB support
for
adband Android Studio, andavoctlfor the command line. - Report a Problem collects a redacted diagnostics archive.
- A Mac with Apple silicon (M1 or newer). Intel Macs are not supported.
- macOS 15 Sequoia or newer.
- At least 10 GB of free disk space: the Android image, and a data disk that grows as you use it.
Everything Avo needs is built in: its own gfxstream GPU renderer, the Vulkan loader and MoltenVK, and Root Canal, Android's Bluetooth controller, all built from source. You need no Android Studio or Android Emulator.
- Download
Avo-<version>-b<build>.dmgfrom Releases and drag Avo to Applications. - Open Avo. The Setup Assistant downloads an Android image from Google's public AOSP build server and starts Android. Allow the background item when macOS asks (System Settings › General › Login Items).
From 1.0 on, Avo updates itself (Settings › About). Earlier versions
can't, so install 1.0 over the one you have by hand. Your Android data
stays in ~/Library/Application Support/Avo.
Requirements: Xcode 26 or later, XcodeGen,
a Rust toolchain (rustup, stable) for the engine, and CMake and Ninja for
the GPU renderer. The Android SDK is needed only to rebuild the small Android
helpers, which are checked in.
The key mapping and the haze's window controls that Avo shares with Avo Hub
are avo_kit, a submodule at
vendor/avo_kit: clone with --recurse-submodules, or fetch it once:
git submodule update --initmake test # host unit and integration tests (swift test)
make project # generate host/Avo.xcodeproj
make gfxstream # build the GPU renderer from source (once; about 6 minutes)
make build # build Avo.app (Debug) into build/DerivedData
make helpers # rebuild the Android helpers embedded in the daemon
cd engine/hvf && cargo test # engine testsOr open host/Avo.xcodeproj in Xcode and run the Avo scheme. A release
disk image is built with scripts/build-dmg.sh (see
docs/releasing.md).
avoctl (in Avo.app/Contents/MacOS) drives the daemon from a terminal:
avoctl status
avoctl install ~/Downloads/F-Droid.apk
avoctl startflowchart LR
subgraph mac[macOS]
cp[Avo.app<br/>Control Panel] -- XPC --> d[AvoDaemon<br/>LaunchAgent + menu bar]
shim[App windows<br/>one process per app] -- XPC: input, displays --> d
d -- spawns --> e[avo-vmm<br/>Hypervisor.framework]
e -- frames in shared memory --> shim
e -- gfxstream, MoltenVK --> gpu[Metal]
end
subgraph vm[Android VM: AOSP Cuttlefish]
adbd[adbd]
apps[Android apps<br/>one display per window]
end
d <-- "vsock: ADB" --> adbd
e <-- "virtio: gpu, input, sound, net, fs" --> apps
| Document | Contents |
|---|---|
| docs/architecture.md | Processes, windows, input, settings, storage, and how each feature works |
| docs/engine.md | avo-vmm: devices, GPU, sound, networking, pause, the daemon contract |
| docs/protocol.md | Host ↔ guest channels and message formats |
| docs/for-game-developers.md | How apps can detect Avo, and what differs from a phone |
| docs/releasing.md | Building, signing and publishing releases and updates |
| docs/versioning.md | Version numbers, betas and build numbers, and when each goes up |
| docs/zero-copy.md | What it would take to draw frames without copying them |
| docs/brand.md | Logo, colours and type |
| docs/spec.md | The original product specification (Indonesian) |
branding/ Logo and app icon sources, and their generator
docs/ Architecture, engine, protocol and release documentation
engine/ avo-vmm and the Hypervisor.framework crates (Rust)
guest/ Android helpers Avo installs in the guest, and the AOSP product skeleton
host/ The macOS apps (Xcode project via XcodeGen) and the AvoKit Swift package
profiles/ Device profiles and keymap templates (JSON)
proto/ Host ↔ guest protocol (protobuf) and test vectors
scripts/ Code generation, image tools, the DMG and its update feed
website/ The project website (static, English and Indonesian)
- Android's back and front cameras are emulated, or show one of the Mac's cameras (Settings › Devices › Cameras); they have no flash, zoom or manual controls. Android's Bluetooth runs on a virtual controller Avo brings (Root Canal) and reaches the Bluetooth LE devices the Mac sees, like watches, sensors and beacons; classic Bluetooth (headsets) and pairing do not work yet.
- Apps that rely on hardware attestation (most banking and some DRM apps) generally do not run, and some online games refuse to run in a virtual machine. Avo does not try to get around that.
- 32-bit-only and x86-only apps cannot run on Apple silicon.
Use Help › Report a Problem in Avo to save a diagnostics archive (personal data is redacted), then open an issue and attach it. Security issues: see SECURITY.md.
Avo is free, and built and maintained by one independent developer. If it is useful to you, you can support its development:
- GitHub Sponsors, monthly or once
- PayPal
- Saweria (Indonesia)
Support goes to the developer personally; it does not buy features or priority help.
Contributions are welcome. See CONTRIBUTING.md, the Code of Conduct and SUPPORT.md.
Thank you to everyone who has made Avo better:
Made with contrib.rocks.
Avo is developed with the help of Claude, Anthropic's AI model, as a coding assistant. It builds on AOSP and Cuttlefish, gfxstream, MoltenVK and the Vulkan loader, Root Canal, Sparkle, SwiftProtobuf and smoltcp; see NOTICE.
Avo is licensed under the Apache License 2.0. The engine crates in
engine/hvf are BSD-3-Clause. Android is a trademark of Google LLC; Avo is
not affiliated with Google or Apple. Device names in profiles/devices are
used only for app compatibility.