Skip to content

aX360e - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/aenu1/ax360e
Upstream https://github.com/xenia-canary/xenia-canary
Version 1.18
Profiled 2026-08-11
Cores ax360e
Systems microsoft-xbox-360
Technical notes

Xbox 360 emulator for Android, distributed on Google Play as aenu.ax360e and aenu.ax360e.free. Xenia Canary is vendored whole under app/src/main/cpp/xenia-canary at canary_experimental dc561e4d, and a JNI layer replaces the desktop front end: its own windowed app and window, AAudio and OpenSLES audio systems, an Android input driver, and disc image, disc archive, STFS and XEX devices backed by the Storage Access Framework. ref: ax360e/app/src/main/cpp/version.h:4-5, ax360e/app/src/main/cpp/CMakeLists.txt:39-74, ax360e/app/src/main/cpp/ax360e_emu.cpp:615

The version is read from the commit subjects, which carry it: 1.18 is the head of main, 1.17 the drop before it. The repository has no tags, and the only gradle file committed is app/build.gradle.bak, which still declares versionName 0.14 and is renamed and completed with the signing block at build time. ref: ax360e/README.md, ax360e/app/build.gradle.bak:13-14

No Xbox 360 system file is loaded. The kernel, XAM and XBDM are HLE modules registered at startup, and every key the emulator needs is a constant in the source: the XEX1 retail, XEX2 retail and XEX2 devkit keys tried in turn when an image is read, the 0x19 key pair the profile blob is encrypted with, and the key vault map XeKeysGetKey answers from. There is no NAND, flash or keyvault path. ref: ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:316-318, ax360e/app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:54-62, ax360e/app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:953-963, ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/util/crypto_utils.cc:20-31, ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xboxkrnl/xboxkrnl_crypt.cc:164-168

The storage root is the external files directory of the package and is passed as a launch argument beside the config path and the log path. Content, cache, patches and plugins hang off it, the global configuration is xenia-canary.config.toml, and per title overrides live in custom_config/.config.toml. The custom driver directory sits in internal storage instead, because the external filesystem cannot carry an executable mapping. ref: ax360e/app/src/main/java/aenu/ax360e/Application.java:14-53, ax360e/app/src/main/java/aenu/ax360e/EmulatorActivity.java:67-73, ax360e/app/src/main/cpp/ax360e_emu.cpp:273-316

ES-DE starts the emulator with the aenu.intent.action.AX360E action and a game_uri extra. The native side dispatches on the name the descriptor resolves to: .xex, .iso and .zar each go to their own loader, and anything else is taken for an STFS container and launched beside a sibling directory named after the file with .data appended. ref: ax360e/app/src/main/AndroidManifest.xml:57-59, ax360e/app/src/main/cpp/ax360e_emu.cpp:554-575

A default profile ships with the application. Its Account blob is extracted from the assets on first run under XUID E0300000A360E000, and the shipped configuration logs that XUID into slot 0. Further profiles are created by the emulator itself, which writes the blob it encrypts. ref: ax360e/app/src/main/java/aenu/ax360e/Application.java:30-34, ax360e/app/src/main/java/aenu/ax360e/Application.java:92-96, ax360e/app/src/main/assets/config/default_config.toml:314, ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:502-558

477 game patches ship inside the APK. The patch database reads the patches directory only, so a bundled patch reaches the emulator once the user opens the patch dialog for that title and presses Apply, which writes the asset out under the same name. ref: ax360e/app/src/main/assets/game-patches, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:30-56, ax360e/app/src/main/java/aenu/ax360e/Emulator.java:121-151, ax360e/app/src/main/java/aenu/ax360e/MainActivity.java:503-512

6 files | 0 required, 6 optional | 1 in repo, 5 missing

<driver>.zip optional missing
Replacement Vulkan driver package

<font>.ttf optional missing
Replacement face for the overlay text

<title_id> - <title>.patch.toml optional missing bundled
Memory patch set for one title

plugins.toml optional missing
Plugin manifest for one title

<plugin>.xex optional missing
Plugin module named by a plugin manifest

Account optional in repo bundled
Encrypted profile account blob

Generated on 2026-08-23T16:12:06Z