Last updated: 08MAY2023 (see Changelog for details)
The Android operating system is found everywhere — on phones, tablets, retro handheld devices, media streaming devices, and even some TVs. This guide is meant to help you get acquainted with game emulation on any number of Android devices.
Table of Contents Recommend accessories Prepare your ROM library Compress your ROM library Storage options Android frontends Game streaming Recommended emulators RetroArch -- classic systems RetroArch vs standalone emulators PlayStation 1 -- Duckstation Nintendo 64 -- Mupen64Plus-FZ Sega Saturn -- Yaba Sanshiro 2 (Pro) Sega Dreamcast -- Redream Nintendo DS -- DraStic PlayStation Portable (PSP) -- PPSSPP PlayStation Vita (PS Vita) -- Vita3K Nintendo GameCube and Wii -- Dolphin PlayStation 2 -- AetherSX2 Nintendo 3DS -- Citra MMJ Nintendo Switch -- Skyline Changelog
Some Android devices will have a microSD card slot, which is handy for storing game files. I recommend using a card from reputable brands like SanDisk or Samsung to use in your device.
In general, I prefer the cards listed below, in order or preference. The prices fluctuate all the time, so keep an eye out for deals. In general, I would expect to pay $20 for a 128GB card, $30 for a 256GB card, and $60 for a 512GB. A 128GB card will allow you to load EVERY 8-bit and 16-bit game out there, just all of the arcade games that work, and quite a few PS1, Dreamcast, PSP, GameCube, PS2, and Sega CD games (those systems have the largest file sizes). A 256GB or 512GB card will allow you to store even more of those larger games. You can use a larger card than these but then you’ll have a card that costs more than the device itself, and are you really going to play more than 512GB of games at once?
128GB cards: SanDisk Extreme Samsung EVO Select SanDisk Ultra 256GB cards: Samsung EVO Select SanDisk Ultra 512GB cards: Samsung Evo Select SanDisk Ultra
Another accessory to consider: if you don’t have a nice microSD to USB adapter, you might want to think about getting one. A nice adapter like this one from Anker will give you the fastest transfer speeds possible, and won’t cause any corruption issues with your card.
Additionally, some Android devices have video-out capabilities via their USB-C port. You will want to check the manufacturer specs to see if it’s possible. I would recommend getting a USB-C to HDMI adapter or a USB-C hub with HDMI output, so that you can turn your device into a home console to play on your TV. The hub might be worth the extra cost, since you can also use it to power the device, connect to a microSD card, and connect wired controllers all in one.
Speaking of controllers, there are plenty of options out there, but I prefer to use something that’s somewhat retro-friendly. You could use a bluetooth controller like the 8BitDo SN30 Pro, or a wired controller like the Betop BD2E. Note that in order to use a USB controller, you will also need an OTG adapter to plug the controller into the device’s USB-C port (you could also use a USB hub to plug in multiple controllers at once!).
If you are using an Android phone, then I recommend a telescopic controller like the GameSir X2. This USB-C controller will wrap around the phone and provide a more seamless experience than clipping a controller to your phone. This controller also has a power passthrough, so you can charge the phone while playing (sadly the USB-C passthrough does not support video out).
Prepare your ROM library
Another important aspect of retro gaming is to build your ROM library. Here is a general list of systems that can be played on Android. Those noted with an asterix cannot play every game at full speed, and so performance may vary. For PS2 and GameCube on lower-end Android devices, I recommend getting PAL region ROMs, because they cap out at 50Hz which will give you better performance than struggling to reach the standard 60Hz found in NTSC region ROMs. ROM files are copyrighted and will not be shared on this website.
Atari 5200 (and 800)
PC Engine (TurboGrafx-16)
PC Engine CD (TurboGrafx-CD)
Nintendo Entertainment System
Famicom Disk System
Sega Master System
Neo-Geo / CD
Sony PlayStation 2
Game and Watch
Nintendo Game Boy
Nintendo Game Boy Color
Nintendo Game Boy Advance
Nintendo Virtual Boy
Sega Game Gear
Neo-Geo Pocket / Color
Sony Playstation Portable
Wonderswan / Color
Commodore 64 (and C16/Plus4, C128)
Final Burn Neo
Neo-Geo / CD
When getting ROM files, I recommend using the “No-Intro” naming convention, which is the standard naming used for ROM sets within RetroArch and other emulation communities. By using no-intro naming, you will be more likely to get box art automatically added when you load up your games in RetroArch or most frontends. If you have a question as to how a game should be named, I recommend checking out the Libretro thumbnails directory, which is what many emulators pull from for their media files. If your game name matches the thumbnail name found in this directory, chances are that it will properly download the media for it.
Additionally, an important component of a ROM library is maintaining BIOS files. BIOS files are system files necessary for some emulators (GBA, Sega CD, or PS1/PS2), and are helpful in improving accuracy with other systems. These files are copyrighted so you are on your own to find them, but a quick search for a RetroArch bios pack should get you on your way. Note that PS2 BIOS files can be easily dumped from your PS2, or you will need to find them elsewhere. Here is more information about BIOS files.
Recommended BIOS files: SEGA CD: bios_CD_E.bin bios_CD_J.bin bios_CD_U.bin FAMICOM DISK SYSTEM: disksys.rom GAME BOY (for boot logo): gb_bios.bin GAME BOY COLOR (for boot logo): gbc_bios.bin GAME BOY ADVANCE: gba_bios.bin NEO GEO: neogeo.zip PLAYSTATION: scph1001.bin PLAYSTATION 2: SCPH-90001_BIOS_V18_USA_230.ROM0 TURBOGRAFX-CD: syscard1.pce syscard2.pce syscard3.pce SEGA SATURN saturn_bios.bin SEGA DREAMCAST dc_boot.bin (renamed to boot.bin) NINTENDO SWITCH prod.keys title.keys
Compress your ROM library
When building your ROM library, another handy trick is to compress your files to save on storage space. This guide will walk you through how to compress many of the CD-based systems PlayStation, Sega CD, Saturn, 3DO, Dreamcast, Jaguar, and TurboGrafx-CD (PC Engine CD).
If you have a microSD card slot on your device, you may have some decisions to make regarding how the storage works. When using Android 10 or below, you may get prompted to “set the SD card up” when first inserting the SD card. It will ask you to choose between the default portable storage option, or using the card as internal storage. Portable storage means that you will be able to freely take the SD card out of the device and plug it into your PC, as demonstrated in the video above. If you set it to Internal storage, you will then be able to install apps on the SD card to save space, but you won’t be able to plug the SD card into your PC — instead, you will have to plug the device into the PC and transfer files via USB instead. Internal storage is a good solution if you want to install a LOT of Android games onto your device, but in general I recommend portable storage for its flexibility.
One other note to make: plugging the SD card directly into your PC to transfer files will give you much greater transfer speeds, about 4x the speed of USB file transfers. So I recommend removing the SD card and plugging it into your computer whenever you have a large batch of files to transfer; USB transfer works fine in a pinch for smaller transfers.
With Android 11 and above, you will get the same prompt, but file permissions settings are different on these more modern OS versions. This is because these OS versions use scoped storage, which provides apps with file permissions without having to request it of the user, while also protecting the user’s data. For apps that have been updated to accommodate scoped storage, this transition is seamless. But for apps that haven’t been updated, they will not be able to access the microSD card if the card has been set up as portable storage. Thankfully, most apps have been updated to accommodate scoped storage, so this is becoming less and less an issue over time.
Note that if you use a USB-C dock like the one featured in the Accessories section above for storage (by plugging in a USB flash drive or SD card), that will also be treated as portable storage.
There is a staggering amount of frontend options available for Android devices. Here is a quick summary of some of the most popular options, and the pros and cons of each. Personally, I would recommend trying some of the free options like Daijisho, ATV Launcher, LaunchBox (trial version), DIG, and/or Pegasus, and see if one of those are a good fit for your play style before you shell out money on something you may or may not like.
Daijisho is easily the best Android frontend available today. Check out the video above for more details, but in a nutshell, it’s 100% free and does a great job of simplifying the setup process. It also has handy tools like widgets to personalize your experience. This one can also act as your default home app, which means that after you have it set up, you will never have to see the Android interface again. It will consolize your device’s navigation experience. Note that for best results, you should set up your emulators first before adding them via this frontend. Also be sure to use “No Intro” romsets to ensure your media is properly scraped.
ATV Launcher (Pro)
ATV Launcher is an Android frontend most commonly used with TV boxes and tablets. It transforms the standard Android interface into a tile-based one, and has some nice features like widgets and the ability to hide or customize each tile. This allows you to make a clean interface that resembles a gaming console, and also works well when using controllers. There is a free version that works well, but the paid version ($3) is necessary to remove ads and have the ability to hide and customize the tiles. This option is a good choice if you don’t mind still having to navigate through standalone apps and emulators; it’ll still definitely feel like an Android device…but a prettier one.
LaunchBox is the priciest option when it comes to Android frontends — there is a free version that is limited to 100 games, but a lifetime license costs a whopping $40. Thankfully, this license can be used on multiple devices, so you will be able to use it on any Android device going forward.
Cost aside, LaunchBox is a nice all-around frontend for those who want a clean interface with minimal work. There’s not much in the way of themes or customization options, but its media scraping function works surprisingly well, and the fact that it is in active development (changelog here) means that just about every emulator on the platform is fully supported. The user interface is relatively smooth and fast, and you can even export your LaunchBox PC library directly to the Android version, with media and everything. Unfortunately this app doesn’t have the ability to re-match an incorrect media scrape, and so for that reason if you are having issues I would recommend building your roms/media in the PC version of LaunchBox first, then export it to Android using the link above.
DIG is a free emulator frontend that is one of the easiest to set up. It will find your games on the device and organize them into their own sections. You can use a number of different themes for the frontend, but my favorite is this one here, called Alek-a-Like. This frontend has a fair amount of customization options, it runs pretty quickly, but doesn’t feel as polished as something like LaunchBox.
Pegasus is also free, and is much more customizable than the alternatives. The interface can be very snappy and sharp looking, but will get bogged down with large collections (over 1,000 games). This one takes a lot of work on the backed to get set up; for example, in order to see game boxart, you must scrape it from a Windows app like Skraper, and then convert the .xml file to something readable by Pegasus. Luckily, someone has created a handy tool called Pegasus Installer that is optimized for Android-based handhelds like the Odin, Retroid Pocket 2+, and the Anbernic RG552 — and it works on Android phones, too. This tool will install the app, download and configure your apps, set hotkeys, scrape media, and provide bezels, too. Note that it seems to work best on Android 10 and lower.
One neat feature about Pegasus is that if you go through the setup of your device using the Pegasus Installer, it will pre-configure RetroArch for you with updated video features (like Game Boy colorization) and bezels. So even if you end up using another frontend, I recommend running through this installer script at least once so that you can take advantage of these configurations.
Reset Collection is a paid ($5) app with some nice features. You can add your systems one-by-one, and it will add the media for you. The interface is clean but won’t scale super well on devices with smaller screens; on phones and some retro handhelds, the browsing experience can feel limiting. The app is in active development, and so most Android emulators are supported (or support is in the works). The scraping experience works well — it uses the LaunchBox database to pull the data, and downloads the media quickly. It also has an advanced search function, video snaps that autoplay from YouTube (saving storage space), and a unique game randomizer option that will pop you into a random game from your library. It is also possible to add skins to the frontend to customize your experience, but unfortunately it only has the one single theme. For more details, check out the Reset Collection YouTube channel.
Arc Browser is a paid ($8.50) app that is similar to DIG in its feel, and Reset Collection in its setup. It does have an active development community within Discord and a comprehensive website that can walk you through some of its customization options. You have a choice of classic and modern UI examples within the frontend, and the app seems particularly designed to be used with a controller, which is great for Android-based handheld consoles.
While this is an emulation guide, it’s also important to recognize that many Android tablets and phones can double as streaming consoles, too. In addition to streaming PC games from your computer or the cloud, you can also use remote play apps to play modern gaming consoles. If your Android device isn’t quite powerful to emulate some higher-end systems, you could run those systems on a computer and then stream your computer to the device instead.
Recommended streaming apps: NVIDIA GeForce Now (PC & cloud streaming) Moonlight (PC streaming) AMD Link (PC streaming) Steam Link (PC streaming) Parsec (PC streaming) Google Stadia (cloud gaming) PSPlay or Chiaki (PS4 & PS5 remote play) Xbox (Xbox One/Series remote play) Xbox Game Pass (Xbox/PC cloud streaming)
In the sections below, I’ll go through the list of recommended emulations and my suggestion configurations. But for ease of use, here is a list of all the recommended emulators all at once:
Recommended emulators: Play Store: Duckstation -- PSX Mupen64Plus FZ (Pro) -- N64 Yaba Sanshiro 2 (Pro) -- Saturn Redream or Flycast -- Dreamcast DraStic -- Nintendo DS PPSSPP (Gold) -- PSP AetherSX2 -- PS2 Not on Play Store: RetroArch (latest nightly build) Dolphin MMJR -- GameCube/Wii Citra MMJ -- Nintendo 3DS Skyline -- Switch
RetroArch — classic systems
RetroArch is a kitchen-sink emulation program available on a variety of platforms, including Android. RetroArch can play dozens of emulated systems while standardizing options like hotkeys, controls, screen settings, and more. The platform is uniquely challenging to set up, and so for that reason I created a standalone RetroArch starter guide. So when setting it up, I recommend following the guide to get oriented.
When setting up RetroArch for Android, there are a few items to consider:
- There are two versions available in the Google Play Store: RetroArch and RetroArch Plus. The first app is optimized for compatibility while RetroArch Plus is 64-bit and designed for devices running Android 8.0 or later. Funny enough, I don’t recommend using either of these apps. Instead, go directly to the RetroArch website and download the latest 32-bit or 64-bit nightly apks directly (the ones at the very bottom with no date), and then side-load the applicable apk onto your device. To side-load, simply navigate to the RetroArch website using your device’s web browser and download and install the app. If your device doesn’t have a browser, move the apk to your device’s storage (via SD card or USB connection) and then install it via a file manager app.
- Once you have installed the app, open it one time to create the file directories on your device. From there you will find the directories in a folder named RetroArch directly in the root folder of your device. Here you can find your save files, screenshots, thumbnails, and more. There is also a “system” folder where you can place your BIOS files (or set a new BIOS directory as demonstrated in the RetroArch starter guide).
- In addition to the RetroArch folder in the root directory, there is another file system location on your Android device, which you can find in the Android > data > com.retroarch.aarch64 (or similarly-named) folder. Within this folder you will find a “files” folder, and inside there will be your retroarch.cfg file in case you want to back this up to another device in the future.
- A bug in some versions of RetroArch (like the Android build) occurs when mapping the A button as a hotkey using controllers that don’t have an embedded controller profile. This will break the use of the A button within the menu. So in some cases you may not want to map the A button to a hotkey at all.
- Devices running older Android versions are sometimes notorious for having input delay, which can be very annoying when playing classic games. The best fix is to use a device with a built-in controller, or one that provides a direct connection, like the GameSir X2. If using a bluetooth controller, you can mitigate input latency by using the RUN AHEAD feature which will reduce latency on certain setups. Like with the rewind feature, this has a performance tax and should only be used on systems that would benefit from it (like SNES and below). Assuming you have already set up your device by following the RetroArch starter, guide, we’ll use a core override to set this up. First, start up a game (like an NES game), and then press SELECT + X to bring up the Quick Menu, then navigate to the Latency section within the Quick Menu. Now select Run-Ahead to Reduce Latency > ON. Now you can go to Quick Menu > Overrides > Save Core Overrides, which will enable run ahead support on all NES games running that emulator core. Note that this is one of many advanced features to improve latency; here is more information.
- Finally, on many versions of RetroArch (specifically those with touchscreen capability, like in Android), they may have a TOUCHSCREEN BUTTON OVERLAY on your screen when starting up a game. If you have a controller you likely do not want to see this overlay. To turn it off, go to Settings > On-Screen Display > On-Screen Overlay > Display Overlay > Hide Overlay When Controller is Connected > ON. Be sure to save your current configuration to make this setting stick.
So yes, when setting up RetroArch, I strongly recommend using my starter guide to get you going. This will orient you with the software and give you the fundamentals to understanding its interface.
My preferred RetroArch cores for popular systems:
Arcade (FB Alpha 2012) -- for low-end devices Arcade (FinalBurn Neo) -- fighting games and beat'em ups Arcade (MAME 2003-Plus) -- all-around arcade emulation Commodore Amiga (PUAE) DOS (DosBox-Pure) NEC PCE/TG-16/PCE-CD/TG-CD (Beetle PCE) Nintendo GB/GBC (Gambatte) Nintendo GBA (gpSP or mGBA) Nintendo Virtual Boy (Beetle VB) Nintendo DS (melonDS) Nintendo NES (fceumm or QuickNES) Nintendo SNES (Snes9x Current) Nintendo 64 (ParaLLEl or Mupen64Plus) ScummVM -- point-and-click PC games Sega Master System/Genesis/CD (Genesis Plus GX) Sega 32x (PicoDrive) Sega Saturn (YabaSanshiro or Beetle Saturn) Sega Dreamcast (Flycast) SNK Neo Geo (FinalBurn Neo) Sony PlayStation (DuckStation, SwanStation, or PCSX ReARMed) Sony Playstation Portable (PPSSPP)
RetroArch vs standalone emulators
RetroArch can emulate a variety of systems, but that doesn’t mean it will be the ideal app for every situation. To its advantage, RetroArch has universal settings which make things like button mapping a breeze, but it can also be less optimized than standalone emulators. This can be especially apparent when using an Android device that isn’t super powerful. Here are some considerations:
- When playing SNES and below systems, RetroArch will almost certainly be the best app to use. In general, only PS1 and above systems should be considered for standalone emulators.
- If you plan on using a frontend like LaunchBox or The Reset Collection, RetroArch is beneficial because you can set up a universal hotkey to quit RetroArch — very few standalone emulators have this feature. What this means is that when using RetroArch, you can press a key combination to quit the game and go right back to your frontend to navigation to another game; on standalone emulators, you will need to tap or swipe on the screen to bring up the app’s menu, then choose to quit the app. This sounds like a minor inconvenience on paper, but in real life it can become annoying and will make your Android device feel less like a true “retro console”. So if the navigation experience is important to you and you want to use a frontend, then RetroArch will provide a better setup.
- RetroArch is free, while many standalone emulators cost money (or have certain features hidden behind a paywall). A good example is Sega Dreamcast. The standalone Flycast emulator is free and can upscale the graphics, but the interface is clunky and difficult to navigate. The standalone Redream emulator is much more intuitive and clean, but you will need to make a one-time in-app purchase to unlock upscaling (more on that in the Dreamcast section below). Meanwhile, the RetroArch app has a Flycast core that can handle both upscaling and widescreen hacks with ease, as long as your device is powerful enough to handle it. If your device is struggling to perform using the RetroArch Flycast core, consider using Redream as you will likely get better results.
- In some cases, the RetroArch cores are simply nowhere near as performant as a standalone emulator. A prime example is Nintendo DS; there are multiple core options within RetroArch for NDS, but they all pale in comparison to the (paid) DraStic emulator.
Bottom line: plan on using RetroArch for everything below PS1, but if you have a device powerful enough to run them, you may want to consider using RetroArch for PS1, N64, PSP, Saturn and Dreamcast so you can take advantage of the universal hotkeys (to quickly jump in and out of your games), saves, upscaling, and more. Otherwise, stick with standalone emulators for those higher end systems.
PlayStation 1 — Duckstation
Duckstation is a powerful PS1 emulator that is more accurate than the PCSX-ReARMed RetroArch core. There are also Duckstation and Swanstation RetroArch cores, which work well. The standalone Duckstation emulator requires more performance power than the RetroArch core, so depending on your device, you may want to use RetroArch instead. Some have reported that ePSXe runs better on lower-end Android devices, so if Duckstation is giving you a hard time, maybe try that one too. Duckstation is available in the Google Play Store for free.
When first booting the app, it will ask you to map the controls. I recommend doing that as your very first thing. Here are the recommended changes:
- Controller settings > Auto-Hide Touchscreen Controller > ON
- Controller settings > Port 1 > Controller type: Analog Controller (DualShock)
- Controller settings > Port 1 > Use Analog Sticks for D-Pad in Digital Mode > ON
Under App Settings, not a lot needs to be changed here. I recommend going to the Enhancements section and adjusting the Resolution Scale depending on how much you want to upscale your 3D graphics. For reference, 3x is 720p and 5x is 1080p. Also in App Settings > Enhancements, turn ON the PGXP Geometry Correction to reduce wobbly polygons; this may negatively affect performance so you may have to adjust as needed.
BIOS: Duckstation requires bios files, I recommend using scph1001.bin as your file. Go into Settings > Import BIOS and navigate to your bios file on your storage.
Recommended file types: Duckstation supports .bin/.cue, .iso, .img, .chd, .pbp, and .m3u file types. I recommend converting your bin/cue and iso files to .chd to save on file space, and using .m3u files or .pbp files for multi-disc games. You can learn how to do that by reading this guide.
Widescreen: This emulator supports widescreen hacks. To set them up, go into App Settings > Display > Aspect Ratio and set it to your desired aspect (16:9 for something like the Odin or a TV, 20:9 for modern smartphones, etc). Then go to App Settings > Enhancements > Widescreen Hack > ON. Note this won’t work for some games, and so you’ll have to manually adjust those. Most in-game menus will appear stretched, but the gameplay itself A good game to test this with is Ridge Racer, it looks amazing in widescreen.
Nintendo 64 — Mupen64Plus-FZ
This app is the best Nintendo 64 emulator available on Android, and is in active development. There is a free version as well as a paid version ($4) that removes ads, and also provides cloud saving and netplay features.
To improve the navigation experience, go into Settings > Input > Show in-game menu > When slide gesture is used. Now, you can swipe from the left side of the screen to bring up the Mupen64 side panel when in a game, to easily save your game, exit, etc.
By default the N64 A and B buttons may be mapped to buttons that don’t feel natural to you. If you want to adjust your mappings, you will need to copy the Android Gamepad controller profile and make your own mapping. From there, go to Profiles > Select Profiles and change the Controller 1 profile to the one you just made.
Under Settings > Display > Rendered Resolution, you can adjust your rendered resolution to whatever your device can handle. I do not recommend using a resolution that is higher than your device’s display. To change the resolution on a per-game basis, tap on a game then select Settings > Rendered Resolution and adjust it there.
The default emulation profile is Glide64-Accurate. In general this is the best profile to use. If you want to change it to a new default profile, go to Profiles > Select Profiles > Emulation profile and make the change. To change it per-game, tap on a game then select Settings > Emulation profile and adjust it there.
BIOS: not needed
Recommended file types: .z64 and .n64 files.
Widescreen: Only one emulation profile in Muper64Plus-FZ has the ability to use widescreen hacks, it is the GlideN64-Accurate profile. To set this up, go into Menu> Profiles > Emulation > GlideN64-Accurate. Tap on it and select “Copy”, then rename it to something like “GlideN64-Accurate Wide”. Tap OK to bring up the profile settings, and go to General > Widescreen hack > ON. Now go to Menu > Profiles > Select Profiles > Emulation Profile and change it to that widescreen profile we just created. This will automatically adjust the aspect ratio, so no need to adjust those settings. A great game to test this on would be The Legend of Zelda: Ocarina of Time. Note that some games (like 2D games) may not look good with this emulation profile; in this case, I would change that game’s emulation profile back to the default Glide64-Accurate profile. Additionally, you can use patches and cheats to enable more accurate widescreen in some games, here is a good roundup of alternative options.
Sega Saturn — Yaba Sanshiro 2 (Pro)
Yaba Sanshiro 2 is a standalone Sega Saturn emulator that is in active development. There is a Pro version ($5.60) which disables ads and prompts to upgrade. This app will provide the best emulation performance, but if you have a powerful enough system, you could also try the RetroArch Yabasanshiro core to take advantage of the integrated and streamlined settings available within RetroArch instead. Note that the standalone Yaba Sanshiro emulator does not work with most Android frontend apps, so in that regard RetroArch may be more ideal for your setup.
The navigation menu for Yaba Sanshiro 2 can be a little weird looking on some devices (like smartphones), so one quick fix is to go into Settings > Game Select Screen > Force Android TV Mode. That might look better on your device.
The developer for Yaba Sanshiro 2 owns an AYN Odin (Snapdragon 845), and provides suggestions for the best performance on the device in this blog post. Here is a quick summary of the recommendations:
- Use version 1.7.4 of Yaba Sanshiro 2 or above
- Use CPU affinity > OFF
- Use Computer Shader > ON
- Polygon Generation type > GPU Tessellation
- Sound time synchronization mode: Real time
- Additionally, to improve the L2/R2 button operation, the developer recommends setting the L2/R2 mode to “Both” within the Odin settings.
When using the Yabasanshiro RetroArch core, I have found that trying to save a save state in Android will crash the app. Additionally, if you have RetroArch set to Auto Save State/Load on exit, that means the app will crash every time you close a game. This is bad because it will affect your in-game saves and RetroArch Quick Menu core options. To work around this, you should open a Saturn game, then back out into the RetroArch settings, go to the Saves section, and turn OFF auto save state/load on exit options. Then go to Quick Menu > Overrides > Save Core Overrides. Now the app won’t crash when you close a game, but you will need to rely on in-game saves in order to record your progress.
With either the standalone emulator or RetroArch core, you will want to remap your controls for optimal gameplay. I recommend using YBA for ABC, and L1, X, R1 for XYZ buttons.
BIOS: If you want the original Saturn boot video sequence within the standalone emulator, you must place the BIOS file (saturn_bios.bin) in the yabause/bios folder on your internal storage (this folder will only appear once you have opened the app at least one time). You can achieve the same result with RetroArch by placing the BIOS file in the RetroArch system folder.
Recommended file types: .chd files. See my CHD section for instructions on how to convert other file types files to compressed .chd files using CHDMAN.
Widescreen: Yaba Sanshiro 2 (and Saturn emulation in general) doesn’t support widescreen hacks, but you can go into Settings > Aspect Ratio > Original and that will output the display in a 3:2 aspect ratio that looks good without stretching the image too much. Some games support anamorphic widescreen out of the box.
Sega Dreamcast — Redream
Redream is an excellent Dreamcast emulator, and my favorite. It is free from the Google Play Store but you will need to upgrade to the Premium version (via in-app purchase, $6) to be able to upscale your resolution. This one-time purchase will be linked to your Google Play Store account and work on any device you use that account on. If you want a free app that allows for upscaling, you can try the Flycast app, or RetroArch if your device is powerful enough.
To set up Redream, go to Library > Add Directory and point the app to your Dreamcast file directory.
When configuring controls, go to Input > Input Device and select the controller input you prefer. Then go in and bind your controller to what you prefer. Make note of the “Exit Emulator” shortcut, you can bind that to a key (like L3) to quickly close a game (and the app) when using a frontend, to improve the navigation experience.
- Video > Game Resolution will allow you to upscale the resolution if you have paid for the Premium version
- By default, Redream runs an auto frameskip (found in Video > Frame skip) that works really well. If you have a powerful system and want a perfectly smooth experience, set this to OFF.
- Video > Frame rate counter > vblanks per second if you want to see the frame count while playing a game
- Video > Vertical Sync > ON
- Video > Polygon sort accuracy > per-strip will work fine in most situations. If you have a powerful device, you can set it to per-pixel instead, but this provides little improvement while requiring a lot of system resources.
BIOS: not needed, but if you add the bios file to /mnt/sdcard/Android/data/io.recompiled.redream/files/boot.bin on your internal storage, it will show the original Dreamcast boot logo when starting up a game. Note that the bios file must be renamed to “boot.bin”. This will also allow you to boot into the bios to manage the VMU storage devices on your app.
Recommended file types: .chd or .gdi files. See my CHD section for instructions on how to convert .gdi files to compressed .chd files using CHDMAN. Also, .cdi files will work but that is a legacy file type that can omit important game information.
Widescreen: Some games will feature cheats that will force-enable anamorphic widescreen. To set this up, open a game, and then press the three vertical dots on the top-right to bring up the pause menu. From there, select “Edit Cheats” and see if there is a widescreen cheat/hack option, and turn it ON. You will likely need to restart the game in order for it to go into effect. If using RetroArch instead of Redream, you can enable them in the Core Options menu, as demonstrated in my RetroArch starter guide.
Nintendo DS — DraStic
When it comes to Nintendo DS emulation on Android, the only viable option is the DraStic emulator. It is a paid app, and costs $4.99. Another standalone option (which is free) is MelonDS, but its development is not as far along as with DraStic.
- Video > Frameskip Value > 0 for most devices
- Video > Fast-Forward Maximum Speed > Unlimited (or lower) to increase the fast-forward speed (good for RPGs)
- Video > High-Resolution 3D Rendering > ON for most devices
- General > Show FPS if you want to see the framerate while playing
- General > Autosave > On Pause/Suspend if you want the game to save every time you pause the game. You can also set it to auto save at 5, 15, or 30 minute increments
- General > Resume Last Save… > ON when you want to auto load your save state every time you open a game
- General > Default Layout > Landscape x:1 to have one large screen and another smaller screen. You can also choose another layout if you so desire
- System > Nickname and Birthday to set a unique UserID which will work in certain games like Mario Kart DS
- System > Always use System Time for RTC > ON if you want a real-time clock synced to your device (good for Pokemon)
To set up controls, go to External Controller > Select Key Mapping > Generic Gamepad then select “Map Control”. Map your buttons as desired; I recommend mapping L2/R2 as your L/R buttons on the console. Then, select “Map Special” and select L1 for “Screen-swap”, L3 for “Fast Forward”, and R1 for “1/2 Screen Swap”. For all the other commands you can tap “Skip” (unless you want to map them to something else). This will allow you to use the shoulder buttons to swap screens and alternate between screen modes.
When playing a game, you will see on-screen buttons. To remove those, start up a game and enter the Menu, then select Edit Screens and Virtual Pad. Here, choose “Landscape Aspect” > Menu > Edit Controller Layout. Go through and tap on each button and then disable them (all but the Menu button), then select Apply. When that is complete, select Menu > Save as global layout. Repeat this process for the “Landscape 1:1” layout as well. This will remove the buttons altogether so they don’t inhibit touchscreen gameplay.
BIOS: not needed.
Recommended file types: DraStic can read .nds as well as .zip and .7z (compressed) files if you want to save on storage space.
PlayStation Portable (PSP) — PPSSPP
PPSSPP is a standalone emulator available in the Google Play Store for free. You can purchase PPSSPP Gold ($5) in order to support the developer and to get a nice shiny golden app.
This app works well by default, but there are some tweaks you can do to improve performance or graphical fidelity.
- Graphics > Backend > OpenGL or Vulkan. In general, OpenGL will give you the most accurate emulation, while Vulkan will sometimes perform better but may have more graphical glitches (especially in game menus). I recommend trying OpenGL first and then adjusting as needed to Vulkan.
- Graphics > Mode > Buffered rendering. You can choose “skip buffer effects” in some cases to improve performance, but this can also seriously glitch (or crash) your game.
- Graphics > Frame skipping > OFF. This can be turned on to improve performance, but should only be considered on very low-end devices. The “auto frameskip” option will theoretically skip frames only when needed, but in practice it can create a yo-yo effect with game speed. Setting the frame skipping to a set number (like 1) will provide a more fluid experience, but without smooth gameplay.
- Graphics > Rendering resolution. Adjust this setting as much as possible to get the best 3D-rendered graphics. 1x resolution will only look good on very small screens, since that is the original PSP resolution. 3x resolution is the equivalent of 720p, and 4x is 1080p; I recommend not adjusting the resolution to higher than your device’s actual display.
- Graphics > Texture upscaling > Upscale level. This will adjust the non-3D graphics in your games, and will sharpen menu text. However, the upscale type (like xBRZ) can also provide an odd smoothing effect to the text.
- Graphics > Anisotropic filtering. This will increasing the rendering quality of 3D graphics but requires memory bandwidth, something that is hard to come by on mobile chipsets. This should only be used on more performant chips and on large displays where you can see the difference.
By default, the on-screen touch controls are enable on this app. To disable, go to Controls > On-screen touch controls > OFF. Additionally, I recommend going into the Controls > Control Mapping section and map your controls so that they mimic the PSP’s buttons. Be sure to assign a button to the “Pause” function, so that you can quickly bring up the PPSSPP menu with a keypad press (I generally assign this to the L3 button)
BIOS: not needed.
Recommended file types: PPSSPP can read .iso, .pbp, and .cso files. In order to save space, I recommend converting .iso files to .cso files using this guide.
Widescreen: not required since this system played at a resolution very close to 16:9 already.
PlayStation Vita (PS Vita) — Vita3K
Vita3K is a standalone emulator that recently released, and is currently available via their GitHub releases.
To get started, you will need to dump your own games or acquire NoNpDrm copies of your games. Here is a quickstart guide from the Vita3K development team. I personally used NoNpDrm dumps of my games and then zipped their game folder (named as the Title ID of the game, like PCSA00029 for Uncharted: Golden Abyss), which can be found within the “app” folder of your game directory.
When starting up the app, it will ask you to download the PS Vita firmware and font pack, with handy links directly to those files within the app. From there, you can create a faux account/ID and browse the menu.
Vita3K is still in early development, and many games will not play accurately. For a full list of compatible games, here is a list of their retail games, as well as homebrew games. For best results with Snapdragon/Qualcomm devices, try to add custom drivers compatible with your device. Here is a list of driver releases.
Nintendo GameCube and Wii — Dolphin
There are many different versions of the Dolphin emulator available for Android. The primary app, which you can find in the Google Play Store or their website, is the most accurate of the emulators, and has very good performance with the OpenGL backend. However, in the past it required a powerful device to run properly, and many forks were created of this app to focus more on performance than accuracy. Over time, the official Dolphin team has implemented a lot of optimizations to their app, and now the official app stands toe-to-toe with some of the more performance-focused options.
Regardless of Dolphin’s variety of forks, my recommendation is to try the official app, and then branch out to the others if you want to see if there is improved performance. The app can be downloaded directly from the Google Play Store, but it is only updated once a month, or you can try the most recent development build for the latest version (albeit with some expected bugs).
Official Dolphin emulator: Development Build (recommended) Beta Build (from Google Play Store)
Dolphin forks: Recently, some forks have stopped releasing updates, or have completely closed their GitHub pages. An archive of these forks is available here if you would like to try them (I would recommend starting with MMJR build 11505 first). Note that performance will vary greatly between them, and will not be consistent per game. Some forks will allow you to apply sub-standard rendering (below 1x) to try and squeeze out performance at the cost of graphical fidelity.
The Dolphin apps work with both GameCube and Wii games. Wii games are more demanding than GameCube, and you will want to go into each individual game and configure the controls. Since each Wii game had unique controls, you’ll want to see what combination works best for you — nunchuck + Wiimote, Wiimote on its side, Classic Controller, and so on. To make per-game input changes, long-press on the game and select “Wii Input”. This is also how you would make per-game input changes for GameCube games.
The Dolphin emulators have the ability to save per-game settings. To make per-game settings, long-press on the game in the main menu, and then make your adjustments. This is handy if you want to enable widescreen for only certain games, or adjust the upscaled resolution for the games that work best on your device. Additionally, I use this feature to adjust the controls for certain games like Wind Waker or Spyro, so that the c-stick (right analog stick) moves in the opposite direction of the default settings (simply map up as down, and left as right) to create a more modern feel.
Some Dolphin tips:
- If you have a low-powered device, use PAL region ROMs (sometimes referred to as European versions) instead of NTSC region ROMs. PAL ROMs generally give you the option of running the game at 50Hz (frames per second) instead of the standard NTSC 60Hz. This means that PAL games can generally reach full speed more easily than with NTSC ROMs.
- These are my recommend default official Dolphin settings if you are using a lower-powered device:
- Config > Interface > Use Panic Handlers > OFF
- Config > General > Enable Savestates > ON
- Config > General > Fallback Region > PAL
- Graphics Settings > Shader Compilation Mode > Hybrid Ubershaders
- Graphics Settings > Compile Shaders Before Starting > ON
- The latest development builds of the official Dolphin app now support VBI Skip, which can be found under Graphics Settings > Hacks > VBI Skip. Turning this on can significantly improve the gaming experience on lower-end devices like the Retroid Pocket 3+ or AYN Odin, by reducing audio stutter. Note that some games (like Twilight Princess, Luigi’s Mansion, and Wind Waker) will not work with this setting turned on, so you may need to experiment. I usually will turn this setting ON and then turn it off on a per-game basis for the games that don’t work with it.
- Go to Settings > Graphics Settings and switch between OpenGL and Vulkan as the Video Backend to see which one performs best with your device. It may vary by game, but generally one graphic backend will run better than the other on each chipset/device. Vulkan can often run faster, but will cause more graphical anomalies.
- There are a few tricks you can do while playing a game to see if you can improve performance on the spot. While a game is loaded, go into the Config menu at the top-right and adjust these two options:
- Immediately Present XFB > ON
- Sync on Skip Idle > OFF
- It is also possible to adjust the emulated CPU clockspeed for certain games (found in the Config > Advanced menu), but this setting is very hit-or-miss depending on the game. Some games run better with a faster clockspeed (F-Zero GX works best at 300), while others like Super Mario Sunshine can perform a little better with a slower clockspeed. I consider this to be a last resort setting tweak, and it highly variable.
- Once you have found settings that work best for each game, you can long-press on the game in the selection menu and make per-game settings changes
BIOS: not needed.
Recommended file types: You can use .iso, .gcz, .wia, and .rvz files with Dolphin. For best results, convert your .iso game files to compressed .rvz files. The easiest way to do this is to install the desktop version of Dolphin on your Windows PC or Mac, and then right-click on the game and select “Convert File…”. You have several different options, but .rvz files work well in all versions of Dolphin past 5.0-12188, and the default compression level will reduce file size by about 10-20%. You can also convert your game files directly in the app if you are using the official Dolphin app from the Play Store. More information is available here.
Widescreen: There are three ways to play GameCube games in widescreen.
- Many GameCube games had support for 16:9 aspect ratio, as the console was released at the same time that TVs were transitioning from 4:3 to 16:9 displays. My recommendation is to go into the game’s settings first and see if there is a widescreen option (here is a list if you want to check ahead of time). If the game supports widescreen/16:9, turn that on, and then go to Settings > Graphics Settings > Aspect Ratio > Force 16:9.
- If the game doesn’t have a widescreen option, you can still enable this “Force 16:9” and then also go to Settings > Graphics Settings > Enhancements > Widescreen Hack > ON and see how the game looks with that setting on. Some games (like The Legend of Zelda: Wind Waker) will look awesome, while others will have textures popping into the sides of the screen that can be distracting (this phenomenon is called culling). If the widescreen hack doesn’t work well, you have a third option.
- You can also use Gecko or Action Replay cheat codes to enable widescreen compatibility with many games. This will often provide the nicest result, but is a more advanced user setup. First, in the Dolphin MMJR app go into Settings > General > Enable Cheats > ON. Then, go to this Dolphin page and find your game, and then make note of the Gecko or Action Replay code for widescreen (the easiest way to do this is to browse to the Dolphin page on the device itself and copy the text). Next, long-press on the game in your Dolphin menu, and select “Cheat/Ini Editor”. Tap the “Edit” graphic at the top right of the screen, then under [Action Replay] or [Gecko] paste the code (including the $NameofCheat part) and tap Done and then Save. Finally, go back into the Cheat/Ini Editor and you should now see the name of the cheat listed; click on it so that it is checked, then press Save.
PlayStation 2 — AetherSX2
AetherSX2 is an Android version of the popular PCSX2 emulator, and is available in the Google Play Store for free. Note that as of March 2023, ownership of the Android app has passed to someone else, and now includes ads (and some potential performance issues). The final alpha build from the original developer can be found here, and many people swear by v1.5 3668 as the most performance version (archive link here).
PS2 emulation is exceptionally tricky, and the AetherSX2 developer recommends a Snapdragon-845 or equivalent device for the best performance (four big Cortex-A75 cores would be a good example). Devices with Adreno GPUs work best, and Mali or PowerVR GPUs will have degraded performance.
When first start the app, it will run the Setup Wizard. In there, it will allow you to set Optimal/Safe or Fast/Unsafe defaults. Use Optimal if you have a powerful device, and Fast if you don’t. If you want to re-run the Setup Wizard at any time, tap the three dots on the top-right of the screen when in the App Settings menu.
Of all the apps in this guide, this one will rely most heavily on per-game settings. You can set this up by long-pressing the game in the main menu, then select Game Properties > Game Settings and make your changes there. You can also adjust settings while in the game itself, by tapping the info button on the top-right corner to access Game Properties.
- If you only have two big (Cortex-A75 or equivalent) cores on your device, like with Snapdragon 700 chipsets, you should disable Multi-Threaded VU1 in the System settings. If you have more than two big cores, turn this setting on.
- Under System Settings > Advanced > Enable Fastmem and Affinity Control
- For some games, you can try enabling the Settings > Graphics> Preload Textures and GPU Palette Conversion options to improve performance.
- You can also adjust Settings > Graphics > Disable Hardware Readbacks for improved performance, but this may also create glitches.
BIOS: You will need PS2 bios in order to use this app. You will be on your own to find them, and I recommend using the SCPH-90001 or SCPH-70001 bios files.
Recommended file types: For the simplest setup, most ROMs will be bundled as .iso files, but you can use .chd or .gz files for reduced file size. To convert ISO files to CHD, check out my guide.
Widescreen: This emulator supports widescreen patches. To set them up, go into App Settings > Display > Aspect Ratio and set it to your desired aspect (16:9 for something like the Odin or a TV, 20:9 for modern smartphones, etc). Then go to App Settings > Display > Enable Widescreen Patches > ON. Note this won’t work for some games, and so you’ll have to manually adjust those. Most in-game menus will appear stretched, but the gameplay itself A good game to test this with is Okami. Note that some games may have built-in widescreen support, like God of War II, which you can find in the game settings menu.
Nintendo 3DS — Citra (MMJ)
Citra is the main 3DS emulator for Android. In addition to the Play Store version, there is a Citra MMJ version that is more suited for lower-end devices and seems to be updated more frequently than the one you can find in the Play Store. There is also a Citra Enhanced app that carries some unique features as well. For most of my own personal use, I prefer the Citra MMJ version, so that’s what we’ll focus on in this guide. All versions are free.
- Use Dual Core > ON
- Screen Layout > Default (one big and one small)
- Internal Resolution > as desired (and what your device can handle)
- Enable Hardware Shader > ON
- Shader Type: Normal Shader with Cache
Once you’ve started a game, swipe from the left to bring up the in-game menu. This will have a separate set of settings that will be helpful for certain scenarios. You can also set up a custom layout to better match the two screens to your device’s screen, and exit the game from this menu. To hide the on-screen controls, be sure to enter the in-game menu and select:
- Settings > Hide Input Buttons > ON
BIOS: not needed.
Recommended file types: 3ds (decrypted) files are my preferred type, but others may work too.
Nintendo Switch — Skyline
There are two main Switch emulators for Android, but Skyline is the only one worth trying. The other emulator requires the use of a specific gamepad or a monthly fee to use touch controls, and it also likely uses stolen code. Skyline, on the other hand, is an excellent emulation option that is completely free, and has made great headway over the past year.
Switch emulation requires a lot of CPU power, so expect to use a SnapDragon 845 device or higher. SnapDragon devices appear to have the best success with running these games as well. For the most part, Nintendo eShop games (indie titles) have the best compatibility and performance. To see which games are working, check out the Skyline official game compatibility list, or if you’re using the AYN Odin, you can consult the community spreadsheet.
To get started, download and install the latest apk file from their website. If you are using a SnapDragon-based Android device, I recommend downloading the latest open-source Turnip drivers for the best performance. To get them, join the Skyline discord server and go into the #general chat channel, and in the pinned comments you’ll find a thread for “Drivers”. Additionally, many of them are hosted on this GitHub page. For a demonstration, check out the installation video below. You will also need to supply your own prod.keys and title.keys files (more info below). After that, just add your ROMs and map your keys and you will be good to go.
- Show Performance Statistics: ON (if you want to see FPS data)
- Docked Mode: OFF (leave ON for high-end Android devices)
If you’d like, you can long-press on any individual game in the Skyline menu and add a shortcut to your home screen, so that you can access the game directly without having to launch the emulator first.
BIOS: prod.keys and title.keys from a Nintendo Switch. These will need to be imported within the Skyline settings (demonstrated in the video above). Consult the Yuzu Quickstart Guide for instructions on how to hack a Switch and dump your keys and ROMs.
Recommended file types: nsp or xci
If a game has an update file, you can follow the steps in this video guide to run Will Faust’s patcher tool. Here is a screenshot of the written instructions, courtesy of the Skyline discord server (credit: Kimchi, 2D Enthusiast, Lunar, and Shutterbug 2000).
To keep up with the latest developments of this emulation, I recommend joining the Skyline discord server (their “showcase” channel is especially helpful) or Mr. Sujano’s YouTube channel.
– updated links to AetherSX2
– updated wording about scoped storage now that many apps support it
– updated GameCube section to include VBI Skip recommendations for low-powered devices
– Link updates to file compression guide
– updated Dolphin section to reflect changes in emulator availability
– updated PS2 section to reflect change in AetherSX2 ownership
– added links to ROM compression guide
– added PS Vita section
– added direct link to Adreno/Turnip drivers in Vita/Switch sections
– added Daijisho video and links/description
– updated links and some housekeeping
– added Nintendo Switch (Skyline) guide
– added widescreen cheat and patch information for N64 and GameCube
– added instructions for widescreen for all standalone emulators
– added instructions for Dreamcast widescreen (ReDream)
– switched to nightly RetroArch build links
– minor changes
– published guide
25 thoughts on “Android Emulation Starter Guide”
Great work guys! It’s a amazing y for Android emulation!
Thanks for sharing with us here informative post about Android Emulation. You can enjoy your android phones more with various apps/ games from apkfun.com easily.
Last week I thought, it would be so helpful if Russ could make an Android emulation tutorial. Yeah and here it is!! Amazing. Thanks, Russ
Awesome guide. Very comprehensive, must have taken a long time to put this all together
citra mmj is linked to the play store version not the mmj one
Thanks for the great guides, keep up the great work!
Hi Ramon, I just double-checked and the MMJ link is correct for me. Could you try it again? Thanks!
I love Commodore 64. Which is your recommendation to enjoy it on Android? Standalone emulator or retroarch?
Pizza Boy not even mentioned? =(
Your CHDMAN.ZIP link doesn’t appear to work.
You need to right-click and select “Save As”, sorry I forgot to add that. I’ve updated the guide!
Thank you, Russ! I’m also having trouble getting CHDMAN.zip to download. Right-clicking and “Save link as …” on your link above still leaves me with a zip file that Windows 10 says is invalid when I try to open it.
Is there another trustworthy source for CHDMAN online?
Hey Russ! I’m having the same issue as other seem to be having with the CHDMAN.zip filee not working. I can download it fine, but when I try to extract it, my computer (running Windows 10) says it’s invalid. I sourced another chdman.exe file elsewhere on the internet, with a .bat file named Cue or GDI to CHD.bat, however I noticed that the file you’ve cited is named differently, as CUE-ISO-GDI to CHD.bat, and I wonder if that makes a difference when I start trying to compress ISO games.
Any chance you’ll update your CHDMAN.zip link?
Thanks for everything.
Latest LaunchBox for Android, lets you fix incorrect box art matches:
Version 1.1 – Released April 12, 2022
Full game editing is now available by long-pressing a game and selecting Edit Metadata or Edit Media
Fixing incorrect matches to the LaunchBox Games Database is now possible by selecting the Search LaunchBox Games Database option in the Edit Metadata screen
Thanks for your great guides!
Great job Russ, your work is amazing!
Q: When I use PS2 ROMS on PCSX2 there is both a GZ file and a TMP file for each game. Do you need both to run aethersx2? When I tried to put both in my PS2 file the app would start scanning the games and repeatedly stop and then eventually freeze.
Great post. I am experiencing some of these issues as well..
Russ, there a minor typo (incomplete sentence) on the PS1 Duckstation guide: “ Note this won’t work for some games, and so you’ll have to manually adjust those. Most in-game menus will appear stretched, but the gameplay itself A good game to test this with is Ridge Racer, it looks amazing in widescreen.”
The tutorial is great
A question about CHDMAN.zip, this can not be opened (I tried it with 7zip) can you help me / us there? Thanks
The Pegasus installer link just takes you to a link for emudeck not the installer. What’s the real link?
When I go to the emu deck discord it says Pegasus has been killed off. Does anybody still have the API for android?
I can’t install Dajishio on my old phone. What are minimum requirements for this app? What android version it supports ? On android 7.0 it’s not possible to install it
The listing on the Play Store says that Daijisho requires Android 8.0 and up.
New to the channel. I have a relatively powerful device (oneplus7 pro) and this guide works perfectly. Thanks for the work. Gonna okay all the MGS games now.
Regarding PPSSPP, I’m unclear what the recommendation is for these settings:
– Graphics > Texture upscaling > Upscale level > Off
– Graphics > Anisotropic filtering > 16x
My fresh install of PPSSPP Gold on Odin has Upscale level set to Off and Ani. filtering set to 16x. Is the recommendation to alter those defaults?
Going to Dolphin MMJR it gives me a 404 error.