Need for Speed: Most Wanted (2005) for Android ARM64
Native APK · Vulkan 1.1+ · touch controls · on-device shader generation
This project brings the nfsmw-nx recompilation and the ReXGlue SDK to Android. The app runs recompiled C++ code with SDL3 and a native Vulkan renderer. It does not emulate an Xbox 360 and does not include any game files.
- Android 8 or later on an ARM64 processor (ARMv8.0 or later).
- A GPU with Vulkan 1.1 or later and the required descriptor indexing features: exposed through Vulkan 1.2 or
VK_EXT_descriptor_indexingon 1.1 drivers. A recent Vulkan version alone does not guarantee these optional features. Since v0.3.7,shaderInt64and buffer device address are no longer needed. The launcher checks your GPU before you play. - Your own copy of Need for Speed: Most Wanted (2005), Xbox 360, PAL Spain edition, extracted, with
default.xex,NFS/andMovies/. This APK is built for that edition's executable. With another edition the game closes at startup, and the launcher warns you. Files from the PC or PS2 versions, or an unextracted ISO, will not work. - Enough internal storage for the APK, the game folder and the generated files.
Tested on a Samsung Galaxy S25 Ultra (Adreno 830) and a Galaxy A55 (Xclipse 530). Tester reports also cover several Mali GPUs (G57, G615, G68, G720).
Not supported yet: GPUs without descriptor indexing, even on recent drivers. This includes Mali-G52/G72/G76 (Bifrost), Adreno 610 and PowerVR GE8320. The renderer needs a different way of managing textures for them.
- Download the APK from the latest release in Releases and open it on your phone. If Android asks, allow Install unknown apps for your browser or file manager.
- Install the APK and open Need for Speed Most Wanted. Grant the file access the app asks for; on Android 11 or later this is the All files access setting. Then go back to the launcher.
- Copy
default.xex,NFS/andMovies/directly intoInternal storage/nsfmw-androidevolved/. You can also tap Elegir carpeta del juego (choose game folder) and select the extracted folder; the app copies it there. - Check that the launcher shows the files as available, then tap Jugar (play). The first time, the app builds
nfsmw_shaders.nfspfrom your copy and shows its progress. This takes from a few seconds to a couple of minutes on slower phones. - The game opens in landscape. Try 1280×720 at 60 FPS to start with.
The folder should look like this:
Internal storage/nsfmw-androidevolved/
├── default.xex
├── NFS/
├── Movies/
├── nfsmw_shaders.nfsp (generated by the app)
└── nfsmw_shaders.nfsp.version (generated by the app)
Do not download or share game files. The shader library is built on your device from your own copy.
Install the new APK over the old one, without uninstalling it or clearing the app's data. Your saves and settings are kept. If the new version changes the shaders, the app rebuilds them on its own when you tap Jugar. With v0.3.7 this happens once.
- Check the file access permission and reopen the app.
- Make sure
default.xexsits directly innsfmw-androidevolved/, next toNFS/andMovies/, with no extra folder in between. - If the import fails, check your free space and select the folder that contains all three items.
- Graphics: internal resolution, FPS limit, antialiasing, shadows, reflections, sky glow, image filter and screen format.
- Text language (v0.3.7): the PAL disc carries the game text in ten languages (Spanish, English, French, German, Italian, Dutch, Swedish, Danish, Finnish and Polish). Choose one in the launcher. Speech and movies stay in the disc's language.
- Game volume: from Normal to Maximum.
- Touch controls: analog or tilt steering, D-pad, A/B/X/Y, LB/RB, BACK, START, brake and throttle. In the editor (gear button) you can move, resize and hide them, and change their opacity.
- Bluetooth and USB gamepads work as player 1 and hide the touch controls.
- Enviar crash o log (send crash or log) creates a ZIP with your device report, to share by email or in a GitHub issue. Attach the ZIP to the form. See the tester guide (in Spanish).
- Custom Vulkan drivers: import an Android ARM64 driver ZIP from Driver Vulkan → Importar ZIP, select it, test it with Probar driver, or return to the system driver. External drivers require Android 9+. Turnip is for Adreno; PanVK is for Mali, with device/Android/kernel restrictions. No driver packages are bundled.
- Mali and other four-set GPUs: the renderer combines the 3D and cube texture descriptor sets when the device supports only four sets. Both Vulkan layouts and shaders are adapted; GPUs with more sets retain their existing path.
- ARM stability: command data is published before another thread executes it, addressing race-start crashes with an invalid guest function address.
- Xclipse: conservative CPU conversion of BC4/BC5 on Samsung proprietary drivers.
- Optional updates: the launcher checks official GitHub releases in the background and offers Actualizar or Más tarde. Buscar actualizaciones forces a manual check. Playing does not require updating or a connection.
Compatibility fixes adapted with attribution from victorgbd's fork, preserving this launcher's design. See the compatibility review and driver instructions. Gameplay and the system driver probe were confirmed on the S25 Ultra; individual Snapdragon 888/8 Gen 1, Adreno 720, Mali and Xclipse combinations still need tester confirmation. Missing descriptor-indexing features are still a limitation.
- Fixed the black screen when returning to the game after switching to another app.
- Vulkan 1.1: the native renderer runs on 1.1 drivers that have
VK_EXT_descriptor_indexing. The shaders (SPIR-V 1.5) are converted to SPIR-V 1.3 when they are loaded; all 152 pass the official validator for Vulkan 1.1. - No more
shaderInt64or buffer device address: the shaders no longer read constants through 64-bit pointers. This opens the game to many Adreno 7xx and Mali-G57/G68 phones that stopped at "el dispositivo Vulkan no tiene shaderInt64". The shader library is rebuilt once (PAL Spain: SHA-256b84602ca…). - Text language selectable in the launcher.
- Edition warning: if your
default.xexis not the PAL Spain one, the launcher explains it instead of closing with "No function registered at 8262E768". - Reports now include the game edition,
shaderInt64, the descriptor indexing source and the list of Vulkan extensions.
Tested on the Galaxy S25 Ultra, including a simulated Vulkan 1.1 driver without 64-bit pointers. The details are in the tester guide.
- v0.3.6: CPU conversion of the BC1–BC5 textures the driver does not support; Mali protection in Estabilidad gráfica (graphics stability).
- v0.3.5: Compatibilidad · experimental mode (Xenos backend), a memory fix for old kernels, and reports from the launcher.
- v0.3.4: fixed blocky and wrong reflections on Xclipse (diagnosis).
- v0.3.3: fixed intro and cutscene audio (Android audio).
Requirements: Android SDK, NDK 28.2.13676358, JDK 17 or later, and PowerShell.
.\build_android.ps1The Release APK is written to android/app/build/outputs/apk/release/app-release.apk. It is optimized and built for arm64-v8a.
android/: launcher, SDL integration and the Android build.app/,sdk/: the recompiled application and ReXGlue.docs/: port notes and build documentation.
Game files and the code generated from default.xex are kept out of Git. See LICENSE and THIRD_PARTY_NOTICES.md. This is a fan project with no affiliation with Electronic Arts; "Need for Speed" is a trademark of Electronic Arts Inc.