Mac.apk v1.0.2377 (alpha)
Mac.apk runs Android apps natively on your Mac: no emulator, no virtual machine. This release gets the Google Play Store drawing its screens, makes launching and converting apps faster, adds a language menu and window tiling, and fixes a batch of apps that crashed or stayed blank. It also carries more contributions from people outside the project. Thank you all.
Requires macOS 26.4 (Tahoe) or later on Apple Silicon. macOS 27 is supported.
The first launch of each app after you update is slower, once. Mac.apk rebuilds each app's converted code and native translations for the new version, and every launch after that is back to normal speed.
New
- Google Play Store opens and draws its store screens. Google's services now start on their own when an Android app opens and shut down when no Android app is running, and they no longer keep icons in your Dock. Signing in with a Google account does not work yet, unless you use Mac.apk's account manager.
- Faster launches. One shared converter process handles all the DEX conversion, a launch no longer converts at a low priority, and Play's services start faster from cold.
- A language menu. Apps follow your macOS language by default, and you can override it per app or for all apps.
- Window snapping and tiling work for apps that react to the window being resized.
- The control panel can launch several installed apps at once.
- Apps now see a Mac made by Apple as their device instead of an unknown one.
- Per-app HTTP and SOCKS5 proxy settings, and KeyStore authentication policies tied to Mac verification (Touch ID). Contributed by @defia (#125, #126).
Fixed since v1.0.2303
- Blank window in Nebula and similar apps: a content root that is not a FrameLayout now sits inside one, like Android's DecorView (#29).
- Apps whose native libraries depend on bundled libraries load those first, and each library binds its imports through its own dependencies before anything else (#35, #113).
- Chaquopy (Python) apps no longer crash at startup from a macOS versus Android struct layout mismatch (#115).
- Flutter apps that looked up their launcher icon with a leading @ now find it (#118).
- Instagram 452 layouts are read from where they moved (#103); on our side 452 still stops early in native startup, so we have not seen it past that.
- SeekerAndroid starts and its Home screen draws (#131).
- Apps that write to final fields outside their initializer start instead of showing a white screen (#117).
- Right-to-left layout, text and tints, bitmap tints and manifest text in many more apps. Contributed by @5566brs and @chuenlok.
- DialogFragments are created and shown from the fragment lifecycle, as on Android. Contributed by @chuenlok (#109).
Not tested by hand yet
These passed our automated checks, but nobody has tried them by hand yet.
- The Bluetooth (CoreBluetooth) backends, which are off unless you set
MACAPK_BLUETOOTH_HOST=1. Contributed by @defia (#124). - Chat in RikkaHub: regular expressions now understand the long Unicode category names (#116).
- The fixes for #29, #35, #113, #115, #117, #118 and #131, each on its own reporter's app. If one of them still fails for you, please say so on the issue.
Known issues
- Hill Climb Racing 2 1.76.0 does not start (a protected native library). See the compatibility list.
- AI Douyin is not usable yet. It no longer hangs at launch and now reaches its first-run consent screen, but it gets no further.
- mindustry takes about 7 seconds to show its first frame on a warm launch.
- Some apps with anti-tamper libraries do not run; the compatibility list says which.
Thank you
This release has a lot of other people's work in it. Their commits are kept under their own names in the history.
- @5566brs: "as AOSP does" fixes across layouts, text, widgets and the framework. #57, #69, #70, #80, #84, #85 (merged), and #62, #63, #64, #65, #66, #67, #68, #71, #72, #88, #89, #90, #91, #92, #93, #94, #95 (included): right-to-left layout and text, bitmap and ImageView tints, PopupWindow, Toolbar, shrunk-APK attributes, parallel-capable class loaders, ReplacementSpan, elevation, provider authorities, themes and compound drawables, Switch, Toasts, GridView, ListView and more.
- @defia: #121, #122, #124, #125, #126: native executable backups outside the ABI library folders, opt-in guest code writes with W^X protection, opt-in CoreBluetooth BLE, per-app HTTP and SOCKS5 proxies, and KeyStore authentication policies tied to Mac verification.
- @chuenlok: #108, #109, #110, #114: animated GIF and WebP drawables, the DialogFragment lifecycle, URL-safe bundle folder names and UTF-8 manifest strings.
- @Mistarille224: #87, #96: application locale selection and feature-based package discovery.
- @m9rco: #102: resource lookup and process identity fixes, with detailed tracing of the Xiaohongshu startup.
- @wishbone305: #119: host clicks for Unreal games.
- @kushu7: #82 and #83: the per-version app folder and Android TV mode work started here and was reworked in v1.0.2306.
And thank you to the people who reported what we fixed: @emkay5771 (#29), @floatinghua (#35), @Mehranpc (#103), @zcf0508 (#113), @RidaShamasneh (#115), @notimp (#116), @lz357601-eng (#117), @trisetiohidayat (#118) and @wakest (#131).
Install
Download macapk.dmg, open it, and drag Mac.apk to Applications (replace the old copy if you have one). The app is signed with a Developer ID and notarized by Apple.
Source code for the two LGPL libraries Mac.apk ships (GLib and GNU gettext's libintl) is attached below, with LGPL-SOURCE-README.txt; all third-party notices are in THIRD_PARTY_NOTICES.txt in the repository.
SHA-256 of macapk.dmg: 76b44b45cd776f3c67e4438bf14e493b7960c3f914b4dc1e8434dc439964a61f