How to install FH2 Recomp

From the APK to the first race: where the game files go, the native renderer’s shader library, custom GPU drivers, updating and the Linux build.

  • Sideloaded APK
  • ISO or folder
  • Title ID 4D530AA4
  • v0.4.5
A white Xbox 360 console standing upright with a white wireless controller in front of it
Xbox 360 and its wireless controller
Advertisement

FH2 Recompiled installs like any sideloaded Android app. Setting it up means installing the APK, giving the launcher your own copy of the game, and choosing a renderer. This guide follows the project’s README and release notes up to v0.4.5.

This site does not explain how to obtain, dump or rip game files. The port needs your own copy of Forza Horizon 2 for Xbox 360, and the APK contains none of the game.

Before you start

  • An Android 8.0+ phone or handheld with an ARM64 processor, a Vulkan 1.1 GPU and 4 GB of RAM or more. See requirements.
  • Your own Forza Horizon 2 for Xbox 360, USA edition (4D530AA4): a disc image or the extracted files, about 8 GB.
  • The APK from the download page, with its SHA-256 checked.

Step-by-step install on Android

  1. Download FH2-Recompiled-0.4.5.apk (109.5 MB) from GitHub and compare its SHA-256 with 4e6cf0cad1187c42631ffb51690e9b9101a30531b69716dc4a0d7ad01d0ef09b.
  2. Install the APK. Allow installing apps from unknown sources if Android asks. With adb: adb install -r FH2-Recompiled-0.4.5.apk.
  3. Open FH2 Recompiled and go to Game and saves. Choose your disc image (.iso), or the folder with the extracted files. File access is asked only when you pick the ISO, the folder or a save.
  4. Choose a renderer in Graphics. Native (the default since 0.4.0) needs fh2_shaders.nfsp next to the game files or the .iso; without it, choose Emulated. Phones whose GPU cannot run the emulated renderer are warned before playing.
  5. Set a starting point: render resolution 50% or lower, anti-aliasing off, FIFO present mode. The settings guide goes further.
  6. Tap Play. The first start takes longer while shaders are prepared.

Required folder layout

The launcher reads either a folder or a disc image. This is the folder layout the README and the first release describe:

Internal storage/jogos/ForzaHorizon2/   ← your extracted game files
  default.xex                           ← the game executable
  XMediaFacade_default.xex
  SpeechFacade_default.xex
  media/                                ← the game’s data folder
  fh2_shaders.nfsp                      ← your shader library (native renderer)

…/ForzaHorizon2.iso                     ← or: your disc image, read in place
…/fh2_shaders.nfsp                      ← next to the .iso for the native renderer

An ISO picked through Downloads, a media category or another file manager works since 0.4.0 (#1). Your game files are never modified.

The native renderer’s shader library

Advertisement

The native renderer draws the game’s GPU commands straight in Vulkan with shaders translated ahead of time by XenosRecomp. Because those shaders come from your game files, the library fh2_shaders.nfsp is not in the APK: you build it on a Linux PC from your own copy (step 2 and the shader line in the table below), then copy it next to the game files or the .iso on the phone, for example with tools/enviar_biblioteca_android.sh.

  • A library built for v0.4.2 works with every release up to v0.4.5. Rebuilding it for 0.4.2 or later gives the fix for faceted car paint on Adreno.
  • Do not use shader files found online: they are game-derived, and players report that they miss shaders and still stutter (#57).

Custom GPU drivers (Turnip)

Performance > GPU driver imports an adrenotools driver package (.zip), such as a Mesa Turnip build or a Qualcomm package, and tests it with Vulkan before it can be chosen. On Adreno 6xx and 7xx a Turnip build is often faster than the phone’s own driver; the Moto G9 Play tests use Turnip “Mr. Purple T30”. If a driver gives a black screen, switch back to the system driver. Mali, Xclipse and PowerVR GPUs cannot use adrenotools drivers.

Updating without losing settings

  • Download the new APK from Releases and install it over the old one: every release from 0.4.1 to v0.4.5 notes that upgrading keeps your settings.
  • Options you never touched take the new defaults (0.4.0 switched untouched setups to the native renderer). Use Restore defaults at the foot of Graphics and Performance to start clean.
  • Saves can be imported, exported and backed up from the launcher.

Building for Linux from source

The Linux x86-64 version has no download: you build it. The README’s steps, on Linux with Clang 20, CMake 3.25+, Ninja, Python 3.8+ and Git, about 20 GB of disk and 12 GB of RAM:

StepCommand
1. Third-party sourcespython3 tools/fetch_thirdparty.py fetches the SDK’s dependencies.
2. Your game filespython3 tools/fase1_extraer.py /path/to/your/ForzaHorizon2.iso -o assets/game_root unpacks your own disc image into a folder Git ignores.
3. Linux buildcmake -S app -B app/out/linux -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DREXSDK_DIR="$PWD/sdk", then cmake --build app/out/linux and tools/rodar_pc.sh. The first build generates the C++ from default.xex into app/generated.
4. Android APK./build_android.sh after step 3; needs Java 17+, the Android SDK with NDK 28.2.13676358 and CMake 3.30.5.
Shader librarytools/xenos/biblioteca.sh after step 2 writes app/out/shaders_fh2/fh2_shaders.nfsp; tools/enviar_biblioteca_android.sh copies it to the phone.

After pulling changes to app/overrides.toml (or any app/*.toml), regenerate the code: the Linux build does it when those files change, or run REXGLUE=$PWD/sdk/out/linux-amd64/rexglue tools/codegen.sh app. The Android build cannot run the generator, so an APK built without that step misses such fixes (the paint shop crash fix is one).

Advertisement
A straight country road between a wheat field and rows of lavender in Provence under a cloudy sky
Road D8 through the lavender, Provence
Rooftops of Sisteron and the Durance valley seen from the walls of the citadel
Sisteron from its citadel, Provence
A sailing boat on the blue bay of Villefranche-sur-Mer with hillside villas behind it
Villefranche-sur-Mer, Côte d’Azur

Frequently asked questions

Where do the game files go on the phone?

Either choose your disc image (.iso) in Game and saves, where it is read in place with no extraction, or copy the extracted files to Internal storage/jogos/ForzaHorizon2: default.xex, XMediaFacade_default.xex, SpeechFacade_default.xex and the media folder. You can also pick the folder from the launcher.

Which edition of Forza Horizon 2 does it need?

The Xbox 360 USA edition, Title ID 4D530AA4, from your own disc. Other editions have not been tested. It is not the Xbox One version of the game.

How do I get fh2_shaders.nfsp?

You build it yourself. It is made from your own game files, which is why it is not in the APK: on a Linux PC, after extracting your disc image as in the README, run tools/xenos/biblioteca.sh and copy app/out/shaders_fh2/fh2_shaders.nfsp next to the game files or the .iso on the phone. Shader files passed around online are often incomplete and are game-derived; use your own.

Can I play without the shader library?

Yes. In Graphics choose the emulated renderer, which translates shaders while you play. It is the faithful renderer but slower, and expect stutter while shaders compile the first time.

Why does Android refuse to update the app?

Builds signed with different keys cannot update each other: the APK from Releases and your own build, for example. Uninstall one before installing the other. Releases from GitHub update each other and keep your settings.

Does the launcher change my game files?

No. The world detail sliders, for example, rewrite the game’s TrackSettings.xml in memory at start; the files on your storage are not touched.