The $30 handheld: moto g 2025
The prepaid phone GameBEX was built on, what it runs, and how to set one up as a dedicated handheld.
Why this phone
Section titled “Why this phone”Walmart sells the prepaid Motorola moto g 2025 (5G, 64 GB) for about $30 (prices and stock vary; check the Walmart listing). You don’t have to buy a plan with it, and it works fine as a Wi-Fi-only device. For about the price of a controller, you get a 120 Hz screen, a microSD slot, and a big battery, which is most of what a handheld needs.
| Part | moto g 2025 |
|---|---|
| Chip | MediaTek Dimensity 6300: two Cortex-A76 cores at 2.4 GHz and six efficiency cores |
| GPU | Mali-G57 MC2 |
| RAM | 4 GB |
| Storage | 64 GB, plus microSD up to 1 TB |
| Screen | 6.7-inch 1604x720 LCD at 120 Hz |
| Battery | 5000 mAh |
| Audio | 3.5 mm headphone jack and stereo speakers |
| Android | Ships with Android 15 (mine runs Android 16) |
I built and tested GameBEX on this exact phone. The whole interface is laid out on a 1600x720 canvas, which is this phone’s screen give or take four pixels. The Entry-level phone tuning tier, the emulator settings GameBEX recommends, closing other emulators before a launch to free up RAM (it only has 4 GB), and the PS2 setup were all tuned on it.
What you need
Section titled “What you need”- The phone.
- A microSD card. Your games go on it, in a
GameBEX/folder. - A controller. I use the GameSir X5s, a telescopic Bluetooth controller with Hall-effect sticks and triggers, and it’s the one GameBEX was tested with. New it’s about $50, but refurbished units often show up on Amazon for $15-20 (prices vary). Other Android-compatible Bluetooth controllers and phone grips can work too.
- Wi-Fi, if you want to download games through a plugin.
Set it up
Section titled “Set it up”One-command setup
Section titled “One-command setup”Finish Android’s first boot, then run setup.sh to install GameBEX and remove
unwanted carrier apps. It runs
from a Linux or macOS computer with adb, bash, and curl; no root or unlocked
bootloader needed.
First enable USB debugging, connect the phone, and accept Allow USB debugging. Then run this from the GameBEX repository:
./scripts/moto-g-2025/setup.shThe command runs the debloat step with confirmation, installs GameBEX, grants its
file/install/notification permissions, and installs and starts Shizuku. Set
MAKE_HOME=1 to also make GameBEX the home screen. Preview with DRY_RUN=1.
Get the scripts and full setup instructions.
After it finishes, pair your controller, allow GameBEX access to Shizuku, add your
games or a source plugin, and install the emulators you need from System.
Shizuku needs restarting after a reboot; ./scripts/moto-g-2025/setup.sh shizuku
starts it again over USB. The roughly $30 price is for the phone alone; your
controller and microSD card are extra.
Set it up on the phone
Section titled “Set it up on the phone”No computer? Use the steps below instead.
-
Set up the phone. You can skip the SIM and the Google account, since GameBEX needs neither.
-
Insert the microSD card.
-
Turn on 120 Hz. In Settings → Display, set the refresh rate to 120 Hz.
-
Speed up animations (optional). Turn on Developer options by tapping Build number in Settings → About phone seven times. Then, in Settings → System → Developer options, set Window animation scale, Transition animation scale, and Animator duration scale to 0.5x. The menus and transitions finish sooner.
-
Remove carrier apps (optional). The prepaid phone comes with carrier apps, ad installers, and preloaded games you’ll never open. From a computer, the debloat script removes them in one go. Without one, you can disable them in Settings → Apps, or remove them for your user with Canta, a free app that uses Shizuku (step 7). Either way, you can put them back later.
-
Install GameBEX. Install the APK and allow All files access when GameBEX asks. The install guide has the details.
-
Install and start Shizuku. Install Shizuku from its official page and start it with wireless debugging (how). GameBEX uses it to set up your controller in the standalone emulators and to close other emulators before a launch. Shizuku has to be started again after every reboot, but you only need it running the first time GameBEX sets up a given emulator (or a new controller), and games launch fine without it.
-
Pair your controller. Pair it in Android’s Bluetooth settings, then open System → Device → Controls & text size in GameBEX to set up the emulators for it. Controllers covers the details.
-
Make it a handheld (optional). System → Device → Set as home screen makes GameBEX the phone’s home screen, so it’s the first thing you see after a reboot. System launcher in the same menu is the way back out.
-
Add games. Copy your games to
GameBEX/<system>/on the SD card, or add a plugin. Supported systems lists the folder name for each system.
The debloat script
Section titled “The debloat script”The debloat script removes carrier apps, ad installers, and preloaded games over adb from a Linux or macOS computer. It's in the GameBEX repo, in scripts/moto-g-2025.
It uses pm uninstall --user 0, so every app stays on the phone’s system image,
and it writes down what it removed so its restore mode can put it all back. It
refuses to run on anything that isn’t a moto g 2025, and it never touches Play,
system updates, the SIM or carrier unlock, WebView, the keyboard, or the financing
and device-lock apps. Google apps and Moto extras are opt-in. It also locks the
screen at 120 Hz and speeds up animations, and PERF=0 skips that part.
You need adb on the computer (the script’s README has the install commands) and USB debugging, which is in the same Developer options menu as step 4. Then, from the script’s folder:
DRY_RUN=1 ./debloat.sh # shows what it would change./debloat.sh # does it, after you type yes./debloat.sh restore debloat-<serial>-<date>.txt # undoFor a fully dedicated handheld, INCLUDE=google,moto,system ./debloat.sh removes
the opt-in groups too, and ./debloat.sh --help lists every option.
Removing the wrong system package can break a phone, which is why the script sticks to a fixed list that was tested on this one phone.
Other phones. The script only runs on a moto g 2025, because a list that’s safe on one phone can lock or break another. On any other phone, use Canta, a free app that removes apps for your user through Shizuku, which you already run for GameBEX. In Canta, set the filter to Recommended and read each app’s description before you remove it, one app at a time. Skip anything about payments or financing, unlocking the phone or SIM, system updates, calls, or the keyboard, even when Canta marks it Recommended: a financed or carrier phone can lock itself, and some phones won’t start, without those apps. To put an app back, open Canta’s uninstalled tab and reinstall it; a factory reset restores everything.
What runs well
Section titled “What runs well”- Games through PlayStation, Nintendo 64, Nintendo DS, Dreamcast, and PSP are a good fit for this phone. Performance still varies by game.
- GameCube runs. I tested it with Crazy Taxi.
- PS2 is where this phone tops out. Lighter games are playable; demanding ones drop frames even with lower settings.
Use it without a SIM
Section titled “Use it without a SIM”Prepaid versions are locked to their carrier. Unlocking follows the carrier’s current requirements, but you don’t need to unlock the phone to use GameBEX on Wi-Fi. It works without a SIM or a plan.