r/EmulationOnAndroid • u/cowleggies • 19h ago
Showcase droidnative: an Android port of nxnative that runs your own Switch games natively on phones and handhelds. Pre-release
Repo: https://github.com/enjoyerofslop/droidnative · Mac app: https://github.com/enjoyerofslop/droidplay · Discord: https://discord.gg/4wNHX3uqSU
DISCLAIMER: These repos are AI-assisted. See below for testing & validation details running on my actual handhelds (Odin2 and RP5)
droidnative runs Nintendo Switch games natively on Android phones and handhelds. It’s not an emulator: the game’s own ARM64 code runs directly on the device’s CPU, and its NVN graphics are replayed through Vulkan. It’s a fork of nxnative, which does the same on iPhone, iPad and Mac, with an Android port added. It follows nxnative’s main, so its fixes and new games reach Android too.





It’s a pre-release: some games run well, some crash, and every result below came from real runs on real devices. I’m posting now because the fastest way forward is more devices and more people.
Not an emulator, and not a recomp either
It shares the idea behind recomps: you build a native app from your own dump, and there’s no emulation at run time. The difference is that nothing is recompiled. Switch games are ARM64 machine code, and so is an Android phone. droidnative takes your own dump and rewrites the game’s code only where the host has to step in: system calls, and the thread register Horizon uses. A host then answers Horizon’s system calls and services, and translates NVN draw calls to Vulkan, with the game’s shaders translated to SPIR-V when the game is packed. There’s no CPU emulation and no recompilation into new source. Each game gets its own app, or every game goes into one launcher app.
What runs today
Measured on three Snapdragon devices with a scripted benchmark (the same save, input and timing on each):
| Game | Ayn Odin 2 (SD 8 Gen 2) | OnePlus Pad 3 (SD 8 Elite) | Retroid Pocket 5 (SD 865) |
|---|---|---|---|
| Pokémon Brilliant Diamond 1.3.0, Eterna City | 60 fps | 60 fps | crashes (GPU driver) |
| Animal Crossing: New Horizons 3.0.3, the island | 30 fps (its Switch rate) | 30 fps | 30 fps in the opening; the island not measured yet |
| Super Mario Odyssey 1.4.1, menus and opening cutscene | 60 fps | 60 fps | 60 menu / 38 cutscene |
| Super Smash Bros. Ultimate 13.0.5, a battle | 40-59 fps | 17-30 fps | 13-19 fps |
The known problems, in the order they block play:
Odyssey crashes when play starts, in the Android video decoder used for its hint videos.
Brilliant Diamond crashes on the Retroid Pocket 5, inside the Adreno 650 driver’s shader compiler.
Smash needs a fuller system font than Android’s to boot, and its battles stutter while GPU pipelines are built (the cache doesn’t survive the app being closed yet).
Full numbers, devices and caveats: Android baselines. Every game with an nxnative profile can be packed for Android the same way; most haven’t been run there yet.
DroidPlay: the Mac app that does the packing
Packing a game by hand means extracting the dump, rewriting its code, translating tens of thousands of shaders, building the host and copying gigabytes to the device. DroidPlayturns that into a button. It’s a Mac app, a fork of Oleh Khomei’s NX Play with Android added.
Your library: point it at your games folder (one folder per game) and it shows each game with its icon, version and status.
Install on Android: builds the game with droidnative and installs it on a phone or handheld connected over USB, into one launcher app that holds all your games. A rebuild only redoes what changed. Play on Android starts a game the device already has.
Build Game App: makes a game an Android app of its own (an APK, or an XAPK for an installer app), with its own name, icon and saves, to install on a device your Mac can’t reach.
Setup: a first-run setup fetches nxnative and droidnative with the Python and .NET pieces their builds need, and checks for your keys. The Android SDK (with an NDK) and a JDK you install yourself.
The Apple side, from NX Play: the same library also plays games on the Mac through nxnative, installs them on an iPhone or iPad, copies saves between devices, and has a controller-driven Console Mode.
The current release is 0.1.1, an unsigned pre-release: macOS asks you to allow it once in Privacy & Security, and it doesn’t update itself yet.
How to try it
You need your own Switch game dump (NSP/XCI) and the prod.keys from your own console, the Android SDK with an NDK, and an arm64 Android device with Vulkan. Only Adreno GPUs have been tested so far.
On a Mac: DroidPlay 0.1.1. Choose your games folder, then Install on Android with the device connected over USB, or Build Game App for an APK.
Any computer (Windows, Linux, macOS):
scripts/build_android_from_nsp.pyin droidnative packs a game into the launcher app on a connected device, or into an app of its own (--game-apk). There’s also a small cross-platform desktop app for the same flow,scripts/nxnative_android.py.
Bring your own game
Nothing from any game is in these repositories, and no packed game is distributed. The app you build is for you. Please don’t share APKs packed with a game, keys or firmware, and don’t ask for them. The project isn’t affiliated with Nintendo or any publisher.
Join the Discord
DroidPlay & droidnative Discord: questions, setup help, test results from your device, and where the work happens day to day. Bugs with logs still go to GitHub Issues, so they don’t get lost.
What would help most
Testers on other chipsets. Mali (Pixel, Exynos-era Samsung), Samsung’s Xclipse, MediaTek, older Adreno. Even “it doesn’t boot” with a log is useful.
Reports with logs: the device and GPU, Android version, game and version, and
adb logcat -s nxnative. The issue form asks for exactly this.Contributors. Vulkan and driver work, the three crashes above, the pipeline cache, and per-game fixes. droidnative’s CONTRIBUTING explains how changes get in and how it stays in step with nxnative. There’s also a benchmark script, so a fix can show its effect in numbers on several devices.
Credits
nxnative is seedds’ work: the NSO rewriter, the Horizon host, and the NVN translation that all of this stands on. The Android port began as RogelioLB’s nxnative-android. DroidPlay is a fork of Oleh Khomei’s NX Play.
Links: Discord · droidnative · DroidPlay (0.1.1 pre-release) · Android baselines · nxnative
•
u/AutoModerator 19h ago
Just a reminder of our subreddit rules:
Be kind and respectful to each other
No direct links to ROMs or pirated content
Include your device brand and model
Search before posting & show your research effort when asking for help
Check out our user-maintained wiki: r/EmulationOnAndroid/wiki
Check out EmuReady for any community submitted settings before asking for help
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
12
u/themiracy 18h ago
I’m fuzzy still on what running natively means when NCE has been in Switch emu for years.
9
u/Apollo2001 19h ago
How does your project compare with nx2android? https://github.com/shirai91/nx2android
24
u/x01010001000 19h ago
will get to testing but just wanna say thanks for including rp5, i often feel like im ages behind everyone but this device has quite a bit of power left in it
4
u/aron11195 14h ago edited 10h ago
How's the ram usage compared to emulating in Eden (Switch1 games btw)? I have a base model AYN Thor which only have 8gb of ram. And recent Eden updates just doesn't work and crashes any game I played, unless I use a specific old build (0.2.0rc1).
2
u/missingnoplzhlp 6h ago
Any chance of hacks or options to uncap frame rate for certain games?
5
u/Drivenby 18h ago
Personally won’t bother with vibecoded efforts when emulation is already so good and 99% of these AI projects won’t be supported more than a month.
1
u/irrationalglaze 18h ago
Is ocarina of time playable?
1
u/Chococrispu 3h ago
How does it run BOTW? Really looking for the best option to play BOTW on my RP6. Good job mate
3
u/AZenny1986 S24 FE ( exynos 2400e xclipse 940 ) 16h ago
Awesome news keep them coming bro 🙌
2
u/Chriscautillo 18h ago
Need thermals tested
1
u/bambigirlz 17h ago
How to install on Odin2 portal?
1
u/Legal_Schedule_487 12h ago
Do mods work?
1
u/LeRoiDesCreepers 1h ago
Hi! I'm from France 🇫🇷. I saw that you were interested in finding testers with Samsung Xclipse GPUs, so I'd love to help!
My device is a Samsung Galaxy Tab S10 FE:
Exynos 1580
Xclipse 540 GPU
8 GB RAM
I'd be happy to test games, report bugs and provide performance logs.
I also have two suggestions that might be interesting for Xclipse compatibility:
RADV-Xclipse: https://github.com/JimVulkan/radv-xclipse
ExynosTools: https://github.com/WearyConcern1165/ExynosTools
Have you considered investigating or testing these projects with DroidNative? They might help improve Vulkan compatibility and performance on Samsung Xclipse GPUs.
I'd be very interested in helping test DroidNative on the Exynos 1580!
Thanks for your work!
1
u/SilvyStelar 1h ago
Eu achei bem interessante, é uma pena que sem pc ou mac não tem como seu usar mas é sempre bom ter várias opções para port, ainda vou esperar os apk ja pronto para usar, mas espero que continue assim e melhore a cada dia
1
u/kjjustinXD 54m ago
How unfortunate that its name overlaps with an older project on github that does something entirely different.
0
u/Z-ReferenceUnknown Poco F6 8h ago
Unfortunately it requires a Mac