Running Android Games on iPhone Without Emulating Them
You've got an iPhone. You've got an APK. Normally those two things don't mix, and the usual workarounds mean booting an entire Android system on hardware that was never meant to run one. Husk takes a different route: instead of emulating Android, it translates the game's native code so it runs directly on your iPhone's processor.
What It Does
Husk is an iOS app that runs Android games and apps on your iPhone. You add an APK, tap it, and it opens full-screen. Under the hood, it offers two distinct paths, presented as the two sides of its Library.
The first is a translation layer. The game's own 64-bit Android code runs directly on the iPhone's processor, and Husk stands in for Android around it — the C library, the Java calls the game makes, OpenGL ES (through ANGLE), Vulkan (through MoltenVK), sound, touch, and controllers. No Android boots, so a game starts in seconds, and its code is never emulated.
The second is emulation. A full Android system (LineageOS) boots under QEMU inside Husk, for apps the translation layer can't run yet and for using Android itself. Since iOS gives apps no hypervisor, the processor is emulated here, which makes it much slower than the translation layer.
The translation layer supports games built on engines Husk has a driver for: Unity, Unreal Engine 4 (through Vulkan), cocos2d-x, Godot 3 and 4, SDL2 and SDL3 (including LÖVE games), GameActivity (Minecraft), NativeActivity, and Rockstar's own engine. It's written in Swift.
Why It's Cool
-
It skips the boot entirely. The translation layer doesn't spin up Android — it stands in for the pieces a game actually touches. That's why a game can start in seconds rather than waiting on a full system to come up, and why the game's code runs at native speed instead of being interpreted.
-
It's honest about the tradeoffs. The README doesn't pretend the emulation path is fast. iOS gives apps no hypervisor, so the processor gets emulated under QEMU, and the project says plainly that this is much slower. That kind of clarity is refreshing — you know which side of the Library you want before you tap anything.
-
The engine list is the real spec sheet. Rather than claiming to run "Android games," Husk tells you exactly which engines have drivers. If your game is Unity, Unreal 4, Godot, cocos2d-x, SDL, or one of a handful of others, you're in the supported lane. If it's pure Java with no native engine, the translation layer isn't for you — and the README says so.
-
Google Play services are faked just enough. Games see Play services as installed and signed out, so the ones that check for it at startup launch normally. Sign-in, cloud saves, and purchases aren't available, but "it opens at all" is a meaningful bar for a lot of titles.
-
The small quality-of-life decisions add up. You can back up a game's saves to a
.zipand restore them later, on the same iPhone or another one. If a game crashes Husk, the next launch shows what happened with a shareable report. One game runs per launch, and you switch by pressing "Close Husk to Play" — when you reopen Husk, that game starts by itself. -
It's not pretending to be universal. An APK needs 64-bit (
arm64-v8a) native code, because iPhones can't run 32-bit ARM code. Split bundles —.xapk,.apkm,.apks, or a Play download's separate split APKs and asset packs — are all supported. Geometry Dash can even load Geode mods.
How to Try It
Husk is installed through sideloading tools. The README's installation section points to SideStore and AltStore, so you'll want one of those set up first.
- Head to the repository: github.com/leviidev/husk
- Check the releases page for the latest build and download count.
- Install via SideStore or AltStore (the README's installing section covers the details).
- Add an APK — or a split bundle like
.xapk,.apkm, or.apks— to your Library. - Tap it and it opens full-screen.
- If the translation layer doesn't run your app, switch to the emulation side of the Library.
If you want to understand the internals before you install, the repo has documentation worth reading: docs/04-translation-layer.md for how the translation layer works, and docs/00-architecture.md for the overall architecture and the emulation path.
Final Thoughts
Husk is a focused tool with a clear audience: people who want to run specific Android games on an iPhone and are willing to sideload to do it. The translation layer is the interesting part — running native code directly and shimming Android around it is a smarter approach than booting a whole OS, and the engine support list tells you quickly whether your game qualifies. The emulation fallback exists for everything else, but the project is upfront that it's slow. If you've got a supported game and a 64-bit APK, this is worth a look.
Follow @githubprojects for more developer tools and open source projects.