安卓修改大师智改工坊 · 技术专栏

为什么只有 ARM64:ABI、模拟器与诚实的取舍

总有人问什么时候出 x86 或者 32 位版本。诚实的回答是:不会出。这篇就来解释 原因——不拿"技术原因"四个字搪塞,而是把真实的取舍摆出来。

一句话版本

DSHBox 不是一个程序,而是一堆预编译二进制的组合,它们必须彼此兼容、也必须 和手机兼容。而这里的每一个二进制都是 ARM64 构建:

  • 安卓一侧的 PRoot 和 guest 加载器;
  • 应用与 guest 之间的共享内存通道;
  • Node.js 24 发行版;
  • 整套 Debian 13 rootfs。

APK 里只有一种 ABI:arm64-v8a。这套栈内部不允许混搭架构——x86 的 Node.js 没法跑在 ARM64 的 rootfs 里——所以"支持 x86"的真实含义是:再构建、再发布 一整套完整的栈。

为什么"加一种 ABI"没那么简单

ABI 不是编译器上的一个开关,而是"链路上每个二进制在该架构上都正常工作"的 承诺。每种 ABI 都要有自己的一套经过验证的构建——PRoot、加载器、通道、 Node.js、rootfs——以及覆盖各更新路径的测试。而且失败的代价很重:任何一环 对所在架构判断错误,坏掉的是首次启动、是初始化那一步,而不是某个冷门功能。 每一层的 SHA-256 哨兵会在启动时校验完整性——但它校验不出一个从未被构建过的 版本。

为什么放弃 32 位

DSHBox 要求 Android 10 及以上(minSdk 29)。这个安卓版本档位的设备绝大多数 是 arm64,纯 32 位手机是持续收缩的尾部的尾部。发布 armeabi-v7a 意味着为这点 余量再养一套完整的二进制矩阵——而单个 APK 已经约 237 MB,其中大部分是二进制, 换个架构就得原样再来一份。为了那么少的新增设备,这笔账不划算。

为什么模拟器不是出路

在别的架构上跑安卓的办法确实存在,我们也都收到过询问:

  • PC 或虚拟机上的 Android-x86 类系统;
  • 在设备上把 ARM 指令翻译成其他 CPU 指令的二进制转换层;
  • 使用 x86 系统镜像的开发用模拟器。

问题出在工作负载上。PRoot 是基于 ptrace 的用户空间:guest 的几乎每个系统 调用都会被陷入、检查、转发,循环往复、热度极高。这恰好是二进制翻译器表现 最差的那类持续、高密度的系统调用负载。转换出来的环境可能慢,可能悄悄出错, 也可能两者皆有——我们不发布、也不测试这些路径。不声称它们能用,是我们能 给出的最诚实的选项。

为什么没有 iOS

iOS 是另一个操作系统,没有提供这类用户空间运行时的分发途径——"侧载一套 PRoot 加 Debian"在这套平台上根本不成立。网站 FAQ 里一句话讲清了这个边界:Android 10+、ARM64,范围就是如此。

我们转而做什么

把要求说清楚,把 ARM64 构建维护到位,不假装不支持的平台能用。如果你不确定 手头某台设备行不行,《设备要求》有 细节,《首次启动排障》讲了初始化 失败时是什么样子。速查表如下:

设备能运行吗说明
ARM64 手机/平板,Android 10+能受支持的配置
32 位(armeabi-v7a)设备不能未发布 32 位二进制
x86 安卓(模拟器、Android-x86)不能未发布、未测试;翻译层未经验证
iPhone / iPad不能另一个操作系统;见 FAQ

想了解这套栈在受支持架构上如何拼装,见 《无需 Root,也无需 Termux》; 想自己构建并验证,见 《从源码构建 DSHBox》。

安卓修改大师 · 智能修改安卓版

想直接在手机上完成改包?智能修改安卓版把本地 Linux 沙箱、AI 对话与一键出包装进一个 App,只需说话就能让应用变成你想要的样子。

立即下载