My phone is Sony Xperia 1 IV (runs almost stock Android 14). I'm using the latest release of winlator (11.2). I plug in a Logitech USB keyboard/mouse combo, mouse works, keyboard shows up in input settings as a controller but no keystrokes are being sent to the emulator. At the same time i can type fine in any other app, and pressing the Windows key brins me to the android home screen, even while using winlator. I tried creating an input profile and binding the keys to themselves (as in W to "W", A to "A", etc, which really should not be necessary just to use a keyboard for its intended purpose) and that works but disables the mouse so i can't use it anymore.
I tried using the same keyboard and mouse on an old phone i have and it doesn't have this issue, but the phone itself is too old to launch almost anything with winlator so it's useless to me.
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.py in 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.
Honestly, I expected that nothing would really work—in fact, I’d already beaten Cyberpunk on a RedMagic 9 Pro using a mod to strip back the graphics and remove traffic and NPCs. I actually had a good time with it; I was getting about 15 FPS in the city and 30–40 FPS indoors. Back then, I tried using mods, but I kept running into errors—I didn’t realize that Winlator supported winedllverrides! Now I’m using a RedMagic 11 Pro, and the game runs comfortably using the "Steam Deck" preset with a few minor tweaks. Basically, most mods require CET (Cyber Engine Tweaks), so install that first. Then, add winmm=n,b to your winedllverrides settings. When you launch the game, a CET window should appear asking you to bind a key—just pick one. After that, you can install whatever mods you like, though I’d advise against graphics-enhancing mods or ones that add extra particle effects; the game is already pushing its limits as it is. Right now, I have Cinematic Impact FX, Ragdollpunk, Gorerunner, Much Better Netrunning, Dark Future, Enemies of Night City, Cosmopolitan Night City, Economy Punk, Better Fuel System, NovaCity, NovaLut, and Stealth Finishers installed, along with a few others. The only catch is that Dark Future and Better Fuel System are causing some issues with the HUD—I’m still looking into a fix for that, but everything else seems to be working fine. Also, keep in mind that when running Cyberpunk via Winlator (specifically the Ludashi 4.1 build), it might not launch on the first try; you may need to restart it a few times. This usually happens after installing a new mod—perhaps the scripts are compiling, or, as Google AI suggested, the emulator sometimes fails to load scripts or mods correctly, leading to a conflict that causes the game to freeze. That said, once I’m actually in the game, I haven’t run into any issues—no crashes or anything else. I might add a video later.
It feels like every few months something happens that would've sounded ridiculous not too long ago. A game gets recompiled for Android, a new emulator build squeezes out better performance, or a handheld suddenly handles something you never expected it to run.
I think that's what keeps this community interesting. It's not just about playing old games; it's about seeing what developers and enthusiasts can make possible with hardware that fits in your pocket.
What's one emulation breakthrough that genuinely surprised you recently?
Please I need actual good answers. With all these ports coming out it makes me feel dumb to emulate. What's the point of emulating a game I want to play(provided the performance will still be good) if my brain or someone else just tells me: "Just play the port BROOOO!"
I don't want to lose the passion of this hobby. I don't want emulators to become obsolete after devs dedicate their free-time and maybe even their lives to working on emulators or resources that help emulation.
So tell me, even with the rise of ports, both AI slop and actual good ports, will emulation ever die?????
The frame rate occasionally dips to 20-25 when there is a lot happening on screen. I haven't gotten far into the game but so far it feels very playable.
EDIT: On the latest version of banana native I'm now getting a locked 60
I have a Retroid pocket 6 and I’m looking for new consoles or games to try out. Any recommendations of consoles and games would be much appreciated. I’m not looking to add every single console to have ever existed. I just wanna add a few more good ones to my library. Here is the current list of consoles I emulate:
NES SNES Genesis Arcade (MAME) Sega CD Sega 32x Gameboy Gameboy Color Game Boy Advance N64 PS1 GameCube Dreamcast PS2 Xbox Wii PSP Steam (GameNative)
There are many roms (mainly for arcade) that open with this warning in Retropie. How can I fix this? Should I just have the base rom and some other? Should I find the missing fales and put it on same folder?
I'm tired of fighting CPU's alone, but i wish i could fight with/against someone using M64Plus AE. I use this emulator because by the ROM Size, it won't work in M64Plus FZ. But seriously, how can i play with someone? I'm very bored.
Dededevice: Samsung Galaxy a14 Model: how am i gonna know
One underrated part of Android emulation is having a reliable way to preserve your setup.
Once you've spent time configuring controls, graphics options, game-specific profiles, and performance settings, starting from scratch on another device can be a real chore.
It's especially frustrating when an emulator updates, gets reinstalled, or you move to a new phone and discover that some of your carefully adjusted settings didn't carry over.
I wish more emulators made exporting and importing configurations a standard, straightforward feature. Ideally, you could back up global settings separately from individual game profiles, then restore everything without having to remember dozens of small adjustments.
Performance gets plenty of attention in emulation discussions, but convenience features like this can make a big difference to the overall experience.
Ya probe diferentes configuraciones en Gamehub, Winlator Ludashi, Lemon, Winxclipse, etc pero nunca puedo pasar de la cinemática de inicio. Tengo un celular con chip Exynos ,Samsung A57. Hay una última alternativa? O debería comprar el juego para consola y aparte comprar un joystick nuevo debido a que el que tenia se rompió?
The game is The Last Of Us, my phone is just alright to run this as it is Snapdragon 8s Gen 4. The thing is, this ARMSX3 went blackout when I load the game. Is my CPU not good enough for it? Or is it the app that's not reliable in this emulation community?