Armbat
Download

ARMv7 container for arm64 Android

Old games.New silicon.

Armbat runs 32-bit ARM games on phones that dropped 32-bit support. One app, real bionic, the device GPU. No root, no second Android, no virtual disk.

OSAndroid 12+
ABIarm64-v8a
APK30.7 MB APK
CapturesSwipe to browse

Rendered on the device, not in a mockup.

Four games, four engines, one container. Every capture below comes from the repository or from a compatibility report.

N.O.V.A. 3 running in Armbat on Android
N.O.V.A. 3Captured on arm64 hardware
Subway Surfers running in Armbat on Android
Subway SurfersCaptured on arm64 hardware
Minecraft running in Armbat on Android
MinecraftCaptured on arm64 hardware
The Sims 3 running in Armbat on Android
The Sims 3Captured on arm64 hardware
Under the hood6

A container, not an emulator.

Guest Java runs on the platform ART. Guest ARMv7 machine code is translated to ARM64 by a JIT built on Dynarmic. Everything below is what makes that work.

arena

One flat 4 GiB arena

A guest address is a 32-bit offset into one arena, so fastmem works without translating pointers on every access.

bionic

Real bionic userland

The linker, libc, libm, libdl and libstdc++ come from an official armeabi-v7a system image. Armbat boots them instead of faking libc.

syscalls

SVC #0, dispatch by r7

Every Linux ARM syscall traps into the container. The kernel layer keeps guest memory, threads and sockets in order.

SVC #0 / dispatch by r7
hle

HLE only where needed

JNI, AAssetManager, EGL, GLES, liblog, ANativeWindow and OpenSLES get host trampolines. GLES is forwarded to the device driver.

input

Input pass-through

MotionEvent reaches the guest surface with pointer id, action index, pressure and time intact, including multitouch and rotation.

loader

ELF32 loader

Segments, DT_NEEDED, dlopen and dlsym, ARM relocations and DT_INIT_ARRAY. Guest libraries load the way the platform expects.

DT_NEEDED → R_ARM_GLOB_DAT → DT_INIT_ARRAY
Requirements4

What you need before the first launch.

Armbat is small on the surface. The conditions below are not optional.

Android 12 or newer

API 31 and up on arm64-v8a. The device may have no 32-bit ABI at all.

EGL and GLES 2.0+

Rendering is forwarded to the host GPU driver, so the driver has to expose both.

armeabi-v7a APKs only

Only 32-bit ARMv7 archives are supported for now. arm64 packages are not translated.

All files access

The library, saves and OBB files live on shared storage. Without the grant the library stays empty.

Data can be placed before the first launch. OBB files go into android/obb/ inside the package folder, saves into files/ or external/files/.