Armbat
下载

适用于 arm64 Android 的 ARMv7 容器

老游戏。新芯片。

Armbat 让 32 位 ARM 游戏在已放弃 32 位支持的手机上运行。一个应用,真实的 bionic,设备 GPU。无需 root,无需第二个 Android,也无需虚拟磁盘。

OSAndroid 12+
ABIarm64-v8a
APK30.7 MB APK
实机截图滑动浏览

在设备上渲染,而不是在效果图里。

四款游戏,四个引擎,一个容器。下面的每张截图都来自仓库或兼容性报告。

N.O.V.A. 3 在 Android 上的 Armbat 中运行
N.O.V.A. 3在 arm64 硬件上截取
Subway Surfers 在 Android 上的 Armbat 中运行
Subway Surfers在 arm64 硬件上截取
Minecraft 在 Android 上的 Armbat 中运行
Minecraft在 arm64 硬件上截取
The Sims 3 在 Android 上的 Armbat 中运行
The Sims 3在 arm64 硬件上截取
技术内幕6

是容器,不是模拟器。

客户机 Java 代码运行在系统 ART 上。客户机 ARMv7 机器码由基于 Dynarmic 的 JIT 翻译为 ARM64。下面说明它如何做到这一点。

arena

一个平坦的 4 GiB 地址空间

客户机地址是地址空间中的 32 位偏移,因此 fastmem 无需在每次访问时转换指针。

bionic

真实的 bionic 用户空间

链接器、libc、libm、libdl 和 libstdc++ 来自官方 armeabi-v7a 系统镜像。Armbat 直接启动它们,而不是伪造 libc。

syscalls

SVC #0,按 r7 分发

每个 Linux ARM 系统调用都会陷入容器。内核层负责维护客户机内存、线程和套接字。

SVC #0 / dispatch by r7
hle

只在必要时使用 HLE

JNI、AAssetManager、EGL、GLES、liblog、ANativeWindow 和 OpenSLES 由宿主提供跳板。GLES 转发给设备驱动。

input

输入透传

MotionEvent 会带着指针 id、动作索引、压力和时间完整到达客户机画面,包括多点触控和旋转。

loader

ELF32 加载器

段、DT_NEEDED、dlopen 与 dlsym、ARM 重定位和 DT_INIT_ARRAY。客户机库按平台预期的方式加载。

DT_NEEDED → R_ARM_GLOB_DAT → DT_INIT_ARRAY
系统要求4

首次启动前需要准备什么。

Armbat 表面上看很简单,但以下条件是必须的。

Android 12 或更高版本

arm64-v8a 上的 API 31 及以上。设备甚至可以完全不支持 32 位 ABI。

EGL 和 GLES 2.0+

渲染会转发给宿主 GPU 驱动,因此驱动必须同时支持这两个 API。

仅支持 armeabi-v7a APK

目前仅支持 32 位 ARMv7 安装包。arm64 包不会被翻译。

所有文件访问权限

游戏库、存档和 OBB 文件位于共享存储中。未授予权限时游戏库将保持为空。

数据可以在首次启动前放入。OBB 文件放在包文件夹内的 android/obb/,存档放在 files/ 或 external/files/。