安卓掌机这几年最有意思的变化,不是硬件参数卷到了什么地步,而是软件侧的整合终于跟上了。三年前想在一台安卓掌机上凑齐 PS2、PS1、NDS、PSP、N64、DC 这一整套,你得装七八个独立 App,每个 App 有自己的文件扫描逻辑、按键映射界面、存档目录和一套能把你逼疯的 BIOS 配置流程,切游戏像切工作流。这次盘点的 DroidDeck 生态走的是另一条路:用一个前端把 ARMSX2、DuckStation、melonDS、Dolphin、PPSSPP 这些各自为战的模拟器收进同一个游戏库,封面、平台分类、核心绑定一次性配好,之后就是点封面直接进游戏。我下面要拆的就是这套东西到底怎么搭起来、八个模拟器各自的能力边界在哪、ARMSX2 这种吃性能的怎么从“能动”调到“稳”,以及我踩过的那些不讲人话的坑。适合两类人看:刚拿到安卓掌机不知道怎么开始的新手,以及已经装了一堆 App 但被配置折磨过的老玩家。
1. 一个入口装下八台主机:前端整合到底解决了什么
1.1 从散装八个 App 到一个网格的体验差
散装方案的核心问题不在模拟器本身。ARMSX2 的单核性能、DuckStation 的精度、melonDS 的兼容性,这些单拿出来都是成熟项目,真正拖后腿的是它们之间不共享任何东西。DuckStation 的存档在它自己的私有目录里,PPSSPP 的在另一个沙盒下,melonDS 又要单独指一次 ROM 路径。你换一台掌机、刷一次系统、甚至只是把存储卡从旧机器挪到新机器,这一整套路径映射就得重做一遍。
前端的价值就体现在这里。它做的事说白了很朴素:维护一份统一的游戏库,记录每个条目对应的平台、ROM 路径和启动参数,点下去的时候用对应的模拟器核心把游戏拉起来。但就是这么一层薄薄的抽象,把“我要玩某个游戏”这个动作从“先想清楚它属于哪个平台、打开哪个 App、在 App 里再翻一遍列表”压缩成“在网格里点一下封面”。
我自己的使用场景很典型:通勤路上二十分钟,想随手打两局。以前这个时长连启动都够呛,现在从待机状态亮屏、进前端、点封面,十秒内进到标题画面。这个体验差决定了掌机到底会不会被真正用起来,而不是躺在抽屉里吃灰。
另一个容易被低估的点是视觉统一。八个独立 App 意味着八套 UI 风格、八种列表密度、八种封面比例。前端把它们抹平之后,整机看起来才像一个“游戏机”,而不是一台装了模拟器合集的手持平板。
1.2 安卓掌机的硬件分档与能跑什么
聊模拟器之前必须先说清楚硬件档位,否则所有“能不能跑”的讨论都是空的。我把手上折腾过的机器粗分三档,这套分法不需要看具体型号,只要看 SoC 档位就能套进去。
| 档位 | 典型 SoC 级别 | PS2 表现 | PS1 与 NDS | PSP 2倍 | GC/Wii |
|---|---|---|---|---|---|
| 入门 | 中低端八核 + Mali-G52/G57 | 多数游戏 30-45 帧,重负载掉到 20 帧 | 满帧无压力 | 勉强 1.5 倍 | 基本放弃 |
| 中端 | 前代次旗舰 + Adreno 640-650 | 2 倍分辨率下多数 55-60 帧 | 满帧加纹理增强 | 2 倍稳定 | 1 倍分辨率可选游戏 |
| 旗舰 | 当代旗舰 + Adreno 7xx 以上 | 3 倍分辨率多数满帧 | 随便开 | 3-4 倍 | 2 倍较稳 |
这张表的关键不在具体帧数,而在“瓶颈在哪”的差异。入门档跑 PS2,瓶颈是 GPU 填充率加 CPU 单核;旗舰档跑 PS2,瓶颈基本只剩散热和功耗墙——你没看错,很多时候不是跑不动,是跑几分钟就被外壳温度压下去了。
所以选游戏策略也不同。入门机建议把 PS2 库压缩到 2D 和轻 3D 作品,把 3D 大作留给 PSP 和 DC;旗舰机则可以放开手脚,但在《战神》这类作品上仍然要做好降一档分辨率的心理准备。这套判断我试过好几次,比盲目相信跑分靠谱得多。
2. 八款模拟器逐个过:谁能打,谁只是能玩
先上一张总表,把八个主角的定位、依赖和调优重点摊开。这张表是我自己折腾完之后总结的,不是官方参数表。
| 模拟器 | 目标平台 | 是否依赖固件/BIOS | 主要调优点 | 上手难度 |
|---|---|---|---|---|
| ARMSX2 | PS2 | 需要机器固件 | 渲染后端、分辨率倍率、VU 抢断 | 高 |
| DuckStation | PS1 | 可选 BIOS(强烈建议) | PGXP 几何校正、CPU 超频 | 低 |
| melonDS | NDS | 需要三件套固件 | 双屏布局、触摸映射、JIT | 中 |
| Dolphin | GC/Wii | Wii 需 NAND 备份 | 双核模式、EFB 缩放 | 中高 |
| PPSSPP | PSP | 不需要 | Vulkan 后端、渲染倍数、纹理缩放 | 低 |
| Flycast | DC + 街机基板 | 需要 BIOS | VMU 存档、内部分辨率 | 中 |
| M64Plus FZ | N64 | 不需要 | 图形插件选择、帧缓冲 | 中 |
| Yaba Sanshiro | SS | 需要 BIOS | 兼容性选项、缓存 | 高 |
2.1 家用机阵营:ARMSX2、DuckStation、Flycast、M64Plus、Yaba Sanshiro
ARMSX2 是这套生态里的话题中心,也是唯一一个会让你重新认识自己机器性能的东西。它走的是 PS2 模拟主线代码的安卓移植路线,架构上把 EE 主核、VU 协处理器和 GS 图形合成器分开处理,硬件渲染部分交给设备的 GPU。这套设计的代价是配置项极多,好处是一旦调对,画面质量远超原机——PS2 原生输出大多在 512×448 这个量级,而 ARMSX2 开到 3 倍分辨率就是 1536×1344,配合纹理过滤,观感完全是两个时代。
DuckStation 是我认为“完成度最高”的那一类。它把 PS1 这个平台吃得非常透,PGXP 几何校正能解决原机上那种顶点抖动和贴图扭曲,开起来之后《古惑狼》这类游戏的地面和轨道终于不再晃。CPU 超频是另一个隐藏神器,部分游戏原生帧率不稳,把模拟 CPU 拉到 150%-200% 反而更平滑,因为它把掉帧的原因从“逻辑等待”变成了“算力充足”。需要注意的是超频会略微增加功耗,掌机上开之前先看看电量。
Flycast 负责 DC 和那批街机基板。它的特点是内部分辨率可以往死里拉,很多 2D 街机游戏开 4 倍之后线条锐利得像新做的高清版。VMU 存档是它独有的坑,需要在设置里给每个手柄槽单独挂一个虚拟存储卡文件,否则部分游戏的存档逻辑会异常。我一开始不知道这事,存档丢了两次才反应过来。
M64Plus FZ 对应 N64,这个平台的特殊性在于它当年就靠各种非标准微代码吃饭,所以模拟器的图形插件选择比参数更重要。GLideN64 是兼容性和画质最平衡的,另一个软件渲染插件只在个别特效出错的游戏里用得上。帧缓冲模拟(FB Emulation)打开能让部分游戏特效正常,代价是掉帧明显,我一般只在过场动画时忍受它。
Yaba Sanshiro 是八个里最难伺候的。SS 的双 CPU 加双 VDP 架构本来就难模拟,它的兼容性列表里能标“完美”的作品并不多。我的建议是把它当成“能玩几个特定游戏就行”的定位,别指望全库通吃。缓存选项打开能减少卡顿,但第一次加载会慢,习惯就好。
2.2 掌机阵营:melonDS 与 PPSSPP
melonDS 对应 NDS,我对它的评价是“干净”。它不像某些老项目那样堆了一堆历史包袱,JIT 编译器开关一开,性能基本不用操心。真正的配置重点在布局:NDS 是双屏加触摸,手机竖屏能上下排但太小,横屏并排又会把触摸操作搞得很别扭。我的做法是横屏加上下排列、主屏放大、副屏缩到下面一条,触摸区域挪到右手拇指够得着的位置。有些游戏必须用麦克风吹气,前端里可以绑一个热键映射到虚拟麦克风,这个细节很容易漏。
固件方面它需要三件套,缺了也能跑但部分游戏会卡在开机自检。这不是随便找个文件丢进去就行的事,版本要和你的镜像区域对得上,日版镜像配欧版固件会出现语言错乱。我在这个问题上浪费过一个下午。
PPSSPP 是八个里最省心的。Vulkan 后端在绝大多数设备上比 OpenGL 稳,渲染倍数直接拉到 2 倍甚至 3 倍,画面立刻从“糊”变“清”。它的纹理缩放功能值得单独提一句,对于那种贴图分辨率很低的游戏,开 2 倍纹理缩放能显著改善观感,代价是显存占用上升和加载变慢。掌机上我一般只在 2D 为主的 RPG 上开,动作游戏保持默认。
2.3 客厅机与兜底:Dolphin 与 RetroArch
Dolphin 的定位有点特殊,GC 和 Wii 的性能要求跨度极大。GC 上的《阳光马里奥》和 Wii 上的大型 3D 作品完全是两个量级的负载。配置上最关键的是双核模式,开了能让 CPU 和 GPU 线程并行,帧数提升非常明显,但个别游戏会出现时序错乱,比如音频爆音或者动画跑飞。遇到这种情况先关双核试一次,能定位问题就省下大量瞎调的时间。
Wii 游戏还需要一份 NAND 备份才能正常存读,这个步骤不能跳过。EFB 缩放的设置是性能与画质的直接交换,缩到 1 倍能省下可观的 GPU 开销,代价是部分依赖帧缓冲的特效会失效,比如某些水面反射。
RetroArch 我放在兜底位。它不在这八款的主名单里,但街机基板、SFC、MD、GBA 这些老平台用它一个就够。它的问题是什么都能干、什么都得自己配,核心加选项的层级设计对新手不友好。我的用法很克制:只装三四个核心,只用来跑那批 16 位和街机作品,配置一次就不动了。
3. 一键开玩的落地配置:目录、核心、按键三件事
3.1 目录结构与固件摆放
“一键开玩”这四个字背后是提前把路径规划好。我踩过的最大坑就是目录乱放导致扫描漏游戏,所以现在固定成一套结构,换机器直接整个目录拷过去。
内部存储/ └── Roms/ ├── ps2/ 游戏镜像 ├── ps1/ ├── nds/ ├── psp/ ├── gc/ ├── dc/ ├── n64/ ├── ss/ └── arcade/ 存储卡根目录/ └── bios/ ├── ps2/ 机器固件 ├── ps1/ 可选 BIOS ├── nds/ bios7.bin / bios9.bin / firmware.bin ├── dc/ dc_boot.bin / dc_flash.bin └── ss/ SS 固件几个要点必须说清楚。第一,平台目录名用英文小写、不带空格,很多扫描器对空格和中文的处理不一致,会出现“扫到了但识别不出平台”。第二,PS2 的固件目录要放对位置,ARMSX2 只会去指定路径找,放错了它会提示“未找到固件”然后拒绝启动部分游戏。第三,NDS 三件套必须齐全且区域一致,这是前面提过的教训。
Android 11 之后的分区存储是个绕不过去的坎。前端要扫描整个 Roms 目录,就得申请“所有文件访问权限”,否则只能看到自己沙盒里的东西。这个权限的申请入口通常藏在系统设置的深层菜单里,前端首次启动时给的提示往往很含糊。如果你发现扫描结果永远是空的,九成是这里没开。
注意:固件文件属于设备本身的版权内容,只能用你自己拥有的设备导出的备份,不要从任何来源下载。这条不是形式主义,很多所谓的“整合包”里混着来路不明的东西,用起来风险自负。
3.2 在 DroidDeck 里建平台、绑核心、抓封面
前端的配置流程一般分四步,顺序不能乱。
第一步是建平台。每个平台对应一个模拟器,一个模拟器可以挂多个平台(比如 Flycast 同时挂 DC 和街机基板),但同一个平台最好不要挂两个模拟器,否则启动时的选择会很混乱。
第二步是扫游戏。指定目录后让它跑一遍,扫完先别急着玩,检查一遍列表。常见的漏扫原因有三个:文件扩展名不在白名单(比如.chd有些前端默认不认)、文件名带特殊字符、目录层级太深。我一般会把镜像统一成最常见的那几种格式,减少不确定性。
第三步是抓封面。这一步决定了整个界面的观感,也是最容易翻车的地方。自动抓取依赖文件名匹配,文件名里带(USA)、(Rev 1)、[!]这类标记的时候匹配率会掉。我的做法是先自动抓一遍,然后手动补那些没抓到的,一次补十几张就差不多了。有洁癖的话可以把文件名清理干净再抓,成功率能到九成以上。
第四步才是绑核心和启动参数。有些前端支持给每个游戏单独覆盖参数,这个功能在 PS2 上很有用——大部分游戏用一套配置,个别吃性能的单独降到 2 倍分辨率,不用每次都进模拟器里改。
3.3 手柄映射与热键的统一约定
按键这件事,我的原则是“所有平台用同一套物理布局”,只在必要的地方做 AB 交换。理由是肌肉记忆,切换平台时如果连确认键都变了,玩起来会非常别扭。
| 物理按键 | 通用映射 | 备注 |
|---|---|---|
| A / B | 确认 / 取消 | 部分欧美游戏原生布局相反,按游戏覆盖 |
| X / Y | 攻击 / 特殊 | PS 系平台映射到方框和三角 |
| L1 / R1 | 肩键 | NDS 上映射副屏切换 |
| L2 / R2 | 扳机 | PS2 游戏压力感应用满行程 |
| 左摇杆 | 方向 | 死区设 0.12-0.18 |
| 右摇杆 | 视角 | 灵敏度 1.0 起调 |
| Select + Start | 呼出菜单 | 统一热键,别每个模拟器设一套 |
死区这个参数值得单独说。摇杆死区设太小,老游戏的角色会自己漂移;设太大,微操就没了。0.12 到 0.18 这个区间是我在几台机器上试出来的甜点,具体取多少看你的手柄质量,摇杆松的取高值。
热键统一的价值在于“不用想”。我的习惯是把呼出菜单、快进、即时存档、即时读档四个功能绑在同一组组合键上,八个模拟器全部一致。这样在任何游戏里手指都知道该按哪,不用回忆“这个是长按还是短按”。
4. ARMSX2 从能跑到稳:PS2 的渲染参数怎么调
4.1 分辨率倍率的像素账
很多人调 PS2 模拟器是凭感觉一档一档试,其实先算一笔账会快很多。PS2 的 GS 输出绝大多数游戏在 512×448 这个量级,像素数约 229k。倍率是按线性放大算的,像素数按平方增长:
| 倍率 | 实际分辨率 | 像素数 | 相对原生 | 60 帧所需填充率 |
|---|---|---|---|---|
| 1 倍 | 512×448 | 0.23M | 1.0 | 约 0.14 亿/秒 |
| 2 倍 | 1024×896 | 0.92M | 4.0 | 约 0.55 亿/秒 |
| 3 倍 | 1536×1344 | 2.06M | 9.0 | 约 1.24 亿/秒 |
| 4 倍 | 2048×1792 | 3.67M | 16.0 | 约 2.20 亿/秒 |
这张表解释了一个常见困惑:为什么从 2 倍升到 3 倍,帧数掉得比从 1 倍升到 2 倍还狠。因为像素数不是线性涨的,3 倍相对 2 倍多了 2.2 倍的像素量。GPU 填充率不够的机器,2 倍是舒适区,硬上 3 倍就是自找掉帧。
还有一个隐藏因素:很多 PS2 游戏的内部渲染分辨率是动态的,战斗场面会临时降低。所以你在标题画面测出来的帧数不代表实战帧数,一定要在战斗最激烈的地方看。
4.2 渲染后端与阻塞项的取舍
后端选择上,Vulkan 在多数安卓设备上比 OpenGL ES 更稳,尤其是在驱动质量较好的机器上。少数老设备 Vulkan 驱动有 bug,会出现画面撕裂或贴图错乱,那就退回 OpenGL。这个不是“哪个更先进”的问题,是“你的驱动哪个实现得更完整”的问题。
比后端更影响帧数的是几个模拟器层面的开关。VU 抢断(VU Cycle Stealing)这个选项的作用是把协处理器的周期让给主核,听起来是优化,实际上是“偷时间”——它会让依赖 VU 的特效出错或者变慢。我的一般建议是保持关闭,只有在某个游戏卡在特定场景时才临时开一档试试。
EE 循环率同理。降循环率能让 CPU 负载骤降,但代价是游戏逻辑可能跑快或者跑慢,表现为动画抽帧、物理异常。这类“用正确性换性能”的开关,我的原则是能不开就不开。
真正值得开的是快速 CDVD 读取和纹理预加载。前者跳过光驱读取的模拟延迟,后者减少运行中的卡顿。这两个对正确性影响极小,收益明显,属于必开项。
4.3 功耗、散热与帧率锁定
掌机上跑 PS2,最大的敌人往往不是算力而是温度。我用红外测温枪量过几台机器,持续跑 PS2 二十分钟后,机身握持区能到 42-45 度,这个温度下 SoC 会开始降频,帧数从 60 掉到 45 左右然后稳住。你以为是模拟器不稳,其实是散热压不住。
应对方式有三条。第一,把系统的性能模式打开,很多掌机有专门的“性能/均衡/省电”三档,跑 PS2 必须用性能档,否则调度器会频繁降频。第二,充电时玩,供电充足的情况下功耗墙更宽松,帧数稳定性明显更好。第三,锁帧。部分游戏原生是 60 帧但实际跑不满,锁到 30 帧反而更平滑,因为消除了 60 和 45 之间来回跳的抖动感。这个操作反直觉但有效,我试过好几次才接受。
帧率限制还有一个副作用要提:即时存档在帧率不稳的时候容易出问题,建议在菜单或者过场时存档,别在战斗高潮按下去。
5. 八款模拟器常见故障速查与独家避坑
5.1 画面类问题
画面问题占了日常折腾的一大半,我整理了一张速查表,按现象倒查原因比逐项排查快得多。
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 启动黑屏但声音正常 | 渲染后端不兼容 | 换 Vulkan/OpenGL 试一次 |
| 贴图错乱、闪烁 | 纹理缓存或精度设置 | 关纹理预加载,降倍率验证 |
| 画面纵向拉伸 | 宽高比设置错误 | 切到 4:3 或 16:9 手动指定 |
| 部分特效缺失 | 帧缓冲模拟未开 | 打开 FB Emulation 验证 |
| 画面上下颠倒 | 某些游戏的已知问题 | 在核心选项里找翻转开关 |
| 3D 模型穿模 | 精度或 Z 缓冲问题 | 调高精度档,代价是性能 |
这里有个通用排查法:把分辨率降到 1 倍、关掉所有增强选项,如果问题消失,说明是增强功能引起的,逐项开回去定位;如果问题还在,说明是核心兼容性问题,换版本或者换后端。
我要特别提一个反直觉的坑:PS1 的 PGXP 几何校正开满之后,个别游戏的 2D 背景会跟着抖动,因为校正确实只对 3D 顶点有效。遇到 2D 背景为主的作品,把 PGXP 调成“仅顶点”或者直接关掉更合适。这个不是所有人都知道,网上一堆教程默认让你全开。
5.2 声音与输入类问题
音频爆音在 Dolphin 上最常见,八成是双核模式的时序问题,关掉双核或者把音频后端换成更保守的实现就能解决。PS2 上的爆音多半是 EE 循环率被改动过,恢复默认值试试。
输入问题里最烦的是摇杆漂移。除了调死区,还要检查前端和模拟器是不是各有一层映射,两层叠加会导致死区翻倍。我的习惯是前端只做按键绑定,死区和灵敏度全部交给模拟器自己管,避免双重处理。
触摸映射在 NDS 上是个高频问题。如果触摸位置偏移,先确认副屏的显示区域和触摸区域是否对齐,很多前端支持单独拖拽触摸层,画面对了不代表触摸框也对了。我在这上面吃过亏,玩《应援团》的时候点哪都不对,最后发现触摸框整体偏了二十像素。
5.3 存档与性能类问题
存档丢过一次之后就学乖了。现在我的做法是:模拟器自己的存档目录和即时存档目录分开,即时存档只做临时用,正式进度一律走游戏内存档,然后每周把整个存档目录拷到网盘一份。这个习惯救过我两次。
另一个容易忽略的点是存档的跨版本兼容。模拟器大版本升级时,存档格式偶尔会变。升级之前先备份,升级完先验证一个旧存档能不能读,再动其他东西。我就遇到过升级后即时存档全废、只剩内存档能用的情况,虽然不致命但很膈应。
性能类的玄学问题里,最常见的是“刚开始很流畅,玩十分钟越来越卡”。这基本是散热导致的降频,不是模拟器的问题。判断方法很简单:退出游戏让机器歇五分钟再进,如果帧数恢复了,那就是温度。这个判断方式我用了很久,比装监控软件直观。
还有一类是“只有特定场景卡”。比如进菜单卡、开地图卡。这种多半是那个场景的渲染负载突增,最省事的处理是给这个游戏单独配一套低倍率参数,别指望一套配置通吃。
6. 长期维护:存档、版本与合规边界
6.1 存档统一与版本迁移
生态整合到后期,真正决定体验的是“换机器能不能无缝搬过去”。我的做法是把所有模拟器的存档目录统一软链到一个自定义位置,整机迁移时只搬这一个目录。有些模拟器支持自定义存档路径,直接在设置里改;不支持的,用文件管理器做目录链接也行,虽然麻烦但一次性投入。
迁移时要注意相对路径,绝对路径带用户名或者设备 ID 的,换机器就断了。我一般会在迁移完之后随便开一个游戏,确认能读到进度、能正常覆盖存档,再做批量操作。
6.2 升级时机与固件合规
模拟器更新频率很高,尤其是 ARMSX2 这类活跃项目。我的策略是“不追新,只追问题”:手上这套配置如果没遇到兼容性问题,就不动。真要升级,先备份整个配置目录和存档,升完先跑三个不同类型的游戏验证,没问题再继续用。
至于固件和游戏镜像,这条边界必须说清楚。所有固件的来源只能是你自己拥有的设备导出的备份,所有游戏镜像只能来自你自己购买的光盘或卡带。这不是保守,是唯一站得住脚的做法。网上那些打包好的“整合资源”看着方便,里面混什么你根本不知道,出了问题连排查的起点都没有。
我个人的做法是建立一个简单的记录表,记清楚每个游戏的来源、格式、转换时的参数。听起来很啰嗦,但当你两年后想不起某个镜像是什么版本、为什么打不开的时候,这张表能省下大量时间。折腾模拟器这件事,最后拼的不是技术,是管理。