一个平坦的 4 GiB 地址空间
客户机地址是地址空间中的 32 位偏移,因此 fastmem 无需在每次访问时转换指针。
四款游戏,四个引擎,一个容器。下面的每张截图都来自仓库或兼容性报告。




首页保持简洁。完整档案和所有版本都有独立页面。
客户机 Java 代码运行在系统 ART 上。客户机 ARMv7 机器码由基于 Dynarmic 的 JIT 翻译为 ARM64。下面说明它如何做到这一点。
客户机地址是地址空间中的 32 位偏移,因此 fastmem 无需在每次访问时转换指针。
链接器、libc、libm、libdl 和 libstdc++ 来自官方 armeabi-v7a 系统镜像。Armbat 直接启动它们,而不是伪造 libc。
每个 Linux ARM 系统调用都会陷入容器。内核层负责维护客户机内存、线程和套接字。
SVC #0 / dispatch by r7JNI、AAssetManager、EGL、GLES、liblog、ANativeWindow 和 OpenSLES 由宿主提供跳板。GLES 转发给设备驱动。
MotionEvent 会带着指针 id、动作索引、压力和时间完整到达客户机画面,包括多点触控和旋转。
段、DT_NEEDED、dlopen 与 dlsym、ARM 重定位和 DT_INIT_ARRAY。客户机库按平台预期的方式加载。
DT_NEEDED → R_ARM_GLOB_DAT → DT_INIT_ARRAYArmbat 表面上看很简单,但以下条件是必须的。
arm64-v8a 上的 API 31 及以上。设备甚至可以完全不支持 32 位 ABI。
渲染会转发给宿主 GPU 驱动,因此驱动必须同时支持这两个 API。
目前仅支持 32 位 ARMv7 安装包。arm64 包不会被翻译。
游戏库、存档和 OBB 文件位于共享存储中。未授予权限时游戏库将保持为空。
数据可以在首次启动前放入。OBB 文件放在包文件夹内的 android/obb/,存档放在 files/ 或 external/files/。