跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Java大前端java

基于闲置小米 9 的天马 G 复古掌机搭建指南

利用闲置小米 9 手机搭配天马 G 前端打造复古掌机,对比 Android 与 Linux 掌机优劣,分析骁龙 855 性能优势及成本控制。记录天马 G 安装步骤,涵盖 APK 部署、Android 沙盒配置及 ROM 元数据整理。解析前端通过 JNI 调用模拟器 APK 的技术原理,验证 DIY 方案可行性与性价比。

监控大屏发布于 2026/3/28更新于 2026/6/215 浏览
基于闲置小米 9 的天马 G 复古掌机搭建指南

1. 硬件选择:自制还是买成品?

最近入手了个手柄,手头正好有个闲置的小米 9,琢磨着能不能把它改造成一台复古掌机。

市面上现成的掌机主要有 Android 和 Linux 两种方案。整体来看,Android 目前优势更明显,除了能玩模拟器游戏,还能直接运行原生安卓应用。

项目Android 掌机Linux 掌机 (ArkOS / JELOS / Batocera)
启动速度20~40 秒5 秒以内
UI 一致性❌ 多 App 无统一样式✅ 完整游戏平台风格
PS2(AetherSX2)✅ 可玩(Snapdragon / Dimensity)❌ 官方 Linux 版 Core 不成熟
Switch(Yuzu)✅ 安卓有社区版 Yuzu❌ 完全无解
PSP/NDS/GBA 等✅ 但调用 APK,界面割裂✅ 全集成 Core,UI 统一
云游戏 / Steam Link✅ 完全支持⚠️ 只能 Moonlight(若有 Core)
系统自由度限制 root,定制难✅ 想怎么魔改都行
易用性✅ 下载 ROM → 配 APK → 玩⚠️ 需要 BIOS / Core 手动配置
适合人群玩模拟器 + 云游戏 + 装 APP想要'开机就是游戏机'的感觉
视觉体验类似安卓电视盒 + 各种前端像原生游戏机固件,主题风统一

有个挺有意思的现象:安卓本质也是 Linux 的魔改版,为什么有些模拟器只能在安卓上跑?查了一圈发现主要是生态问题。比如 PS2 模拟器的作者 Tahlreth 只开发了 AetherSX2 for Android,底层用了 Android NDK + Vulkan/OpenGL ES 来实现 JIT。这些技术栈几乎是安卓独有的,直接移植到 Linux 难度很大。

JIT / 动态重编译器(Dynarec)

JIT(即时编译)是模拟器场景下的核心性能优化技术。它能在程序运行时,将宿主设备不兼容的原始指令(如游戏机专属指令集)实时转换为宿主硬件可直接执行的机器码,而不是逐条解释执行。同时,它会持续监测并识别频繁执行的'热点代码',通过函数内联、循环展开等手段生成更高效的机器码,大幅减少指令翻译开销。这让原本因'指令不兼容 + 解释低效'而卡顿的程序(如 PS2、Switch 游戏),在手机等设备上也能流畅运行,平衡了跨平台兼容性与执行效率。

做复古掌机最难的部分其实就是模拟器本身,涉及到对汇编指令的模拟和调度,也就是上面提到的 JIT。之前写过一点 GB 模拟器的 Demo,后来忙了就搁置了。

再看看市场情况。以热门的安伯尼克为例,35XX 用的是 T700,1 颗 2.5GHz Cortex-A76 大核加 3 颗 2.3GHz 小核;406V 用的是 T820,1 颗 2.7GHz Cortex-A76 大核加 3 颗 2.3GHz 小核。虽然性能有提升,但幅度不大,价格却翻了 2~3 倍。

手里这台闲置的小米 9 搭载高通骁龙 855。对比 T820,855 的单核性能几乎翻倍,整体多核也强 1.5–2 倍以上,GPU 更是 T820 的 3 倍以上。年初买的二手小米 9 大概 350 元,现在可能更便宜。加上手机手柄,总成本也就 406V 的一半。既然自己动手能省一半钱,性能还翻倍,顺便学点知识,折腾一下显然是更明智的选择。

2. 天马 G 前端的安装与配置

国内目前流行的方案是天马 G 前端。不管是玩家还是工作室,基本都用这个。网上有很多打包好的教程,照着做就行。

安装主要分三步:App 安装、配置文件处理、ROM 资源整理。

2.1 APKS 安装

大致包含 MT 管理器、天马 G 主程序、RA(RetroArch)以及各个独立模拟器。我是用 ADB 安装的,这样比较干净。安装完成后启动一次赋予权限即可,不需要额外搞什么复杂的操作。

2.2 配置文件

配置主要涉及三个部分:PG_安卓主题包、PG_天马 G 安卓配置,以及一个 Android 文件夹。

其中两个 zip 文件是天马 G 的配置文件,包含金手指、存档路径等设置。那个 Android 文件夹则是关键。

文章配图

原因很简单:在 Android 11 及以上系统中,每个 App 的数据目录(Android/data/包名)受沙盒保护,普通文件管理器无法直接写入。但天马 G 要让多个独立 App(Pegasus、RetroArch、AetherSX2)共享配置文件、ROM 路径和启动脚本,所以必须提前把它们的配置放好。这部分目前只能手动处理。

2.3 ROM 资源整理

ROM 资源涉及版权,正规渠道通常不会提供,这部分需要用户自行获取。不过好在社区有一些整合包,里面内容比较全。

ROM 本质是游戏镜像,直接拷贝到 SD 卡或手机里就行。但为了配合天马 G 的前端 UI,还需要增加一些元数据文件。

以《恶魔城:白夜协奏曲》为例,通常需要以下文件:

文章配图

一张主图、一张副图、一段介绍动画。此外还有一个整体的 metadata 文件,可以直接使用精简包里现成的。弄完之后放在手机根目录的 Roms 下面即可。如果是用的社区发布版,这些内容在精简包里通常已经做好了。

2.4 运行效果

实际运行比预想的顺利。

文章配图

界面确实华丽了不少,比起一般 Linux 掌机的纯文字列表,好看且方便很多。

文章配图

外接 USB 手柄也非常方便,延迟几乎感觉不到。

不过手机也有局限,主要是屏幕尺寸。运行一些老游戏时,两边会有很大的黑边,影响沉浸感。不过 PSP 的游戏看着就好很多。

文章配图

总体还算满意,既利用了闲置物品,又省了钱,折腾技术的乐趣也满足了。

3. 天马 G 的技术原理

天马 G 其实是个开源项目,官网地址是:https://pegasus-frontend.org/

这和之前的认知有点区别,天马 G 真就是一个前端,所有工作相当于一个 ROM 管理器和模拟器启动器 Launcher。核心逻辑还是依赖各家模拟器自己的 APK。

文章配图

整套实现基于 QT,这也是为什么它支持那么多平台。功能本身不算复杂,没有太核心的黑科技,主要还是调用第三方模拟器。看了一下 Android 的核心代码如下:

public static String launchAmCommand(String[] args_arr) { 
    final LinkedList<String> args = new LinkedList(Arrays.asList(args_arr)); 
    if (args.isEmpty()) return "No arguments provided to 'am'"; 
    final String am_command = args.pop().toLowerCase(); 
    if (!am_command.equals("start")) return "For 'am', only the 'start' command is supported at the moment, '" + am_command + "' is not"; 
    try { 
        Intent intent = IntentHelper.parseIntentCommand(args); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
        m_self.startActivity(intent); 
    } catch (Exception e) { 
        return e.toString() + ": " + e.getMessage(); 
    } 
    return null; 
}

逻辑很清晰:拼接好参数,JNI 层直接调用 startActivity 去唤起第三方模拟器。天马 G 提供的就是一套 UI 框架,如果你直接装一个 RetroArch,其实也能玩,只是少了这个统一的管理界面。

4. 关于 FPGA 的扩展

对模拟器本身还是挺关注的,有没有可能接一个 FPGA 来提升性能呢?这个问题留给将来的将来再研究吧。

目录

  1. 1. 硬件选择:自制还是买成品?
  2. 2. 天马 G 前端的安装与配置
  3. 2.1 APKS 安装
  4. 2.2 配置文件
  5. 2.3 ROM 资源整理
  6. 2.4 运行效果
  7. 3. 天马 G 的技术原理
  8. 4. 关于 FPGA 的扩展
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Java 并发高频面试题:Semaphore 使用场景与常见误区
  • Llama-3.2-3B 代码审查实战:基于 Java 面试题的评估体系
  • Galacean Effects 核心功能与 Web 动画特效开发指南
  • LeetCode 142:链表环的起点检测
  • HBase 架构深度解析:HMaster、RegionServer 与 ZooKeeper 协同机制
  • Open WebUI Docker 容器化部署最佳实践
  • 自然语言处理(NLP)在客户服务中的应用与实战
  • C++ 泛型编程与模板技术详解
  • RabbitMQ 核心概念与六种常用模式解析
  • Spring Boot 配置加载顺序详解
  • 路径类动态规划入门:3 道经典例题详解
  • C++ 继承中的同名成员隐藏规则详解
  • C++ 关联容器:Set、Map 与键值对详解
  • CAP 理论:分布式系统设计准则与争议解析
  • 深入理解 Agentic AI:概念、架构及与 AIGC 的区别
  • C++ 构造函数与初始化列表核心解析
  • 码农与软件工程师的核心区别及能力要求
  • Java Map 和 Set 数据结构详解
  • CentOS 安装 LNMP 环境配置
  • 背包类动态规划详解:0-1、完全及二维费用

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online