自制AnyPS5:PS5游戏库与存档的本地数据管家

📅 发布时间:2026/10/14 9:31:32
自制AnyPS5:PS5游戏库与存档的本地数据管家
把PS5的游戏管理做成一个“独立项目”来搞是最近我干过最上头也最值的一件事。起因特简单游戏越买越多主机自带的“内容保存库”越翻越乱想找某个游戏得翻好几页安装了哪些、占了多少空间、上次玩是什么时候全靠脑子硬记。琢磨了一段之后我干脆自己动手做了一个小工具代号就叫AnyPS5。这个项目本身不是破解、不是“魔改”就是一套围绕主机内容库、存档和容量的本地管理助手目标是把“我有哪些游戏、每个游戏多大、玩到什么进度、存档备份了没”这些事变成一份清晰可控的清单。这篇文章不聊遥不可及的架构就聊聊我是怎么拆解需求、设计数据流、解决那些官方文档里根本查不到的坑的。如果你也是一个PS5玩家或者纯粹想练手做点跟主机交互的工具这篇应该能给你不少能直接用的思路。1. 游戏库整理这件事为什么值得单独做一个工具先聊点实在的。PS5自带的界面和内容保存库对轻度玩家来说够用但对常年囤游戏、机子里塞了好几百小时内容的人来说已经明显跟不上了。我遇到的具体问题有三个这三个问题基本就是做AnyPS5的原始动机。第一个问题游戏列表的筛选维度太僵化。官方库能按安装状态、游戏类型、最近游玩这些基本条件来筛但我想知道的是更复杂的组合比如“已通关但还没删的游戏里哪些占空间最大”或者“这个月碰过、但下个月可能想接着玩的PS4兼容游戏有哪些”。这类多条件组合查询在主机的原生界面里做非常别扭你得来回切换好几个页面脑子记一遍才能得出结论。第二个问题存档本体的存在感太低。大部分玩家对存档的印象就是“游戏里自动保存了”但真到换机器、出二手、或者SSD突然抽风的时候才意识到存档这玩意有多值钱。官方提供云存档备份但有几个限制比如不主动手动上传可能不同步、云端容量有上限、USB备份的完整度也需要自己琢磨。我希望有一个工具能把每款游戏的存档状态、上次备份时间、占用空间做成一条条可追踪的记录像管理密码一样管理存档。第三个问题游戏库和硬盘容量之间缺一个“报表层”。主机的存储管理页面能看到每个游戏占多大但它不会告诉你“内容库里所有游戏的总占用是多少”、“哪些游戏已经几年没开了完全可以删掉”、“如果删掉这三个冷门游戏能腾出多少空间给下一个大作”。这些问题本质上就是数据分析主机的交互逻辑不适合做这种分析而一个外部工具天然适合。所以AnyPS5的产品定位从一开始就很明确不替代官方界面而是做官方界面之外的“数据管家”。它读取主机的游戏库数据、存档状态和占用信息然后本地整理、分析、展示。核心价值就一句话让玩家在一个独立的地方看清自己全部数字资产的全貌。从技术角度说这个项目最难的不是那些花哨的界面而是“数据从哪里来”和“数据怎么持续保持同步”。这两点是整个项目的骨架也是后面所有模块的基础。想清楚了这两点工具的开发就成功了一半。2. 信息从哪来主机数据通道的拆解与抓取思路2.1 官方App是现成的“参照物”要做游戏库管理工具第一件事就是确认厂商自己是怎么让手机App看到主机数据的。官方手机应用能远程开关机、看游戏库、下载游戏、看奖杯信息这说明主机之间一定有一条现成的数据通道。渠道无非几种要么走官方云服务中转要么走局域网直连要么两条都有。手机在外网时可以远程操作主机说明至少有一条云通道是通的通过厂商账号鉴权后直接和主机会话绑定。我当时验证的逻辑很简单把手机App和主机连同一个Wi-Fi然后用抓包工具观察App在“刷新游戏库”时产生的网络请求。这个过程能在不破解、不改机的前提下搞清楚官方App走了哪些端口、用了哪些HTTP接口、返回了什么格式的数据。这一点非常关键因为做工具和做破解的分界线就在于是去“读”已有的数据通道还是去“绕过”授权机制。我的全部工作只做前者复现官方App的正常协议完成用户授权后读取自己账户下主机的数据。2.2 本地同步优先云端接口作为备用实际抓包观察下来局域网场景下App和主机之间有直连通信外网场景下则通过云服务转发。对本地管理工具来说最佳策略是优先走局域网直连因为延迟低、数据全、不会频繁触发厂商服务端的限流机制。这里有个坑局域网直连通常基于mDNS和UDP广播做设备发现。也就是说主机在局域网里会周期性地宣告自己的存在App就是靠这个发现主机IP的。我在实现AnyPS5时也走了同样的路径扫描到主机后会记录它的IP地址。但这里马上就遇到一个经典问题IP不是固定的。主机重启、路由器分配策略变化、网线断开重连IP都可能变。针对这一点我的方案是“动态发现为主、手动配置兜底”每次启动工具时都重新广播扫描一次如果扫描不到就给用户一个手动填IP的入口。主机的数据通道大致可以归纳为下面几步主机在上电状态下于局域网内广播服务信息工具端发起会话建立请求获得一个访问令牌使用令牌调用主机的读取类接口拿到游戏库、存储、存档状态数据断开或等待令牌过期由工具在下次访问时自动刷新2.3 数据结构长什么样拿到数据之后我做的第一件事就是格式化和归类。无论协议怎么变返回的数据核心字段基本是固定的我按四个维度来存储游戏标识信息游戏名称、内部ID、平台类型PS5原生/PS4兼容、是否有资料片或DLC游戏状态信息安装状态、已安装版本、最后游玩时间、游玩时长如果能取到的话容量信息游戏本体占用、追加内容占用以及封包后的大小存档相关信息存档是否存在、存档修改时间、云同步状态可读取时这四类字段构成了后面所有功能的原料。游戏库管理、容量分析、存档提醒本质上都是对这四类字段做筛选和聚合。有一点特别提醒这类数据通道是官方App在用的厂商随时可能调整协议或加一些风控逻辑。做工具的人要有“接口会变”的心理准备不要把所有代码都绑死在某个返回字段的拼写上。键名与嵌套结构的变化是常态折中做法是解析层做一层兜底映射能读到的就展示读不到的就标“未知”别让一个字段缺失导致整个工具崩溃。3. 核心模块拆解从游戏清单到存档时间线3.1 游戏列表模块可组合筛选才是灵魂AnyPS5第一版最核心的页面就是一支可多条件组合筛选的游戏数据表。每个游戏一行展示名称、类型、安装状态、大小、最后游玩时间、游玩进度状态这六列默认信息。筛选条件我做了三组按安装状态过滤已安装 / 已下载未安装 / 仅云端保留按游戏来源过滤PS5版 / PS4兼容版按最近活跃过滤近7天 / 近30天 / 近半年 / 一年以上未启动组合起来就能解决我开头说的那种需求比如“找出半年以上未启动、容量超过50GB、已安装的PS4游戏”把这份清单拉出来基本就是要清理的首要目标。这就是“报表层”的意义所在主机原生界面根本不给这种视角。我还额外做了一个“预计空间回收量”的计算把筛选出的游戏容量加起来直接显示一个总数字心里立刻有数删哪些、能腾多少空间一目了然。3.2 容量管家模块冷热数据一眼分清游戏装多了以后存储空间最让人焦虑的不是“满了”而是“满在哪儿了”。容量管家模块就是在游戏数据表之上做了两层聚合第一层是“总览视图”展示SSD总容量、已用空间、可用空间、内容库游戏总占用、系统及App占用这些一级数据。这个视图侧重宏观让玩家一眼看出大头在哪儿。第二层是“排行视图”按游戏占用空间从高到低排序同时标注各自的“最后游玩时间”和“游玩活跃度标签”。活跃度标签是我自己定的规则三个月内启动过为“活跃”半年内为“温存”超过一年为“冷档”。冷档游戏就是清理空间时最值得考虑的对象。这层的价值在于把“空间管理”从经验主义变成数据驱动。以前清理空间靠回忆“这个好像不玩了删了吧”现在直接看排行和冷档标签决策快很多也少了很多“删完才想起来里面还有通关存档”的后悔时刻。3.3 存档时间线模块把“存档存在”变成“存档安全”这是我最喜欢也花心思最多的模块。思路是对每一款已安装的游戏记录它的存档修改时间和云同步状态把“存档是否处于最近的安全状态”变成一条可视时间线。实现逻辑是这样的首次接入时对当前已安装游戏建立存档快照记录每个游戏的存档数量、总大小、最近修改时间后续每次同步时对比快照标记新增、变更或丢失如果某游戏超过一个月没有同步且游戏本体已被删除给出醒目提醒“该游戏存留在主机本地的存档记录可能已不可恢复”这里有个常见的误区要纠正一下很多人以为主机删掉游戏本体后存档还会“好好地留在系统里”。这句话对一半本地存档确实还在但它跟前端界面一样脆弱。如果之后做过系统初始化或者不小心在存档管理里删掉了记录那数据和游戏本身一样说没就没。所以我把这个模块设计成“提醒型”而不是“监控型”它不产生挽救动作但会把风险用可见的方式暴露出来倒逼玩家去设置里做真正的备份。3.4 标签与备注给游戏库加一层自定义维度官方库的分类粒度不够用所以我加了一套本地标签系统。每个游戏可以打多个标签比如“通关”“竞技”“会面”“待玩”标签数据只存在工具本地不影响主机任何设置。这样一来筛选游戏就多了一个个人语义维度游戏库真正变成“我的库”。4. 开发过程中的关键选型与踩坑记录4.1 技术栈与运行形态的选择AnyPS5一开始就没打算做成Web服务或者跑在NAS上的后台进程因为目标用户是普通玩家最顺手的形态是桌面软件。所以在技术选型上第一版我选的是桌面GUI框架主要考虑了三点跨平台玩家用的系统五花八门最好是Windows和macOS都能跑可分发性打包后体积适中双击就能跑不需要配数据库服务开发效率一个人开发生态要成熟遇到问题能快速找到解决方案所以最终选了Electron React TypeScript这套组合。Electron在桌面端确实被不少人吐槽包体积大但换来的是界面开发效率和跨平台一致体验。对一个小工具来说这波交换很值。数据存储用SQLite理由很简单单文件、零配置、查询能力强游戏数据天然是结构化的用SQL做筛选聚合比在内存里手写数组循环爽得多。4.2 与主机通信的三个大坑开发过程中踩的坑比功能本身更能让人成长。挑三个最有代表性的说。第一个坑是HTTPS证书校验。设备发现做完后建立会话和调用接口的第一步就是HTTPS请求。但我第一次跑通协议后一接真实主机就报TLS握手失败。原因在于主机的接口服务用的是自签证书系统根证书库里没有对它放行。我记得第一次排查时从证书链一直看到密钥交换算法折腾了两天才想到是证书信任链的问题。最终方案是在工具内部对这一个特定域名做证书校验豁免同时限定只在局域网直连场景生效。这里最关键的一点是豁免范围必须精确到单个主机地址绝不能搞成全局“忽略证书错误”否则整个通信链路的安全边界就被自己拆了。第二个坑是访问令牌的过期策略。主机会话令牌有一套刷新逻辑过期时间比预想的短很多。一开始我按会话型令牌的思路拉一次数据建一次会话结果发现每隔一段时间就会出现“请求成功但返回未授权”的诡异现象。翻了抓包记录才发现令牌快过期时接口返回的包里有一个特殊的续期标记字段。正确逻辑是收到这个字段时要对旧令牌做刷新拿到新令牌后再重发请求。这个机制本身是为了安全设计的但对外部工具开发者来说确实是最容易忽略的暗坑。第三个坑是主机休眠状态下的“假失败”。局域网设备扫描能扫到主机但调用接口时经常超时。一开始以为是自己代码的问题做了一堆日志分析才发现主机在休眠待机模式下服务并没有完全停止但数据接口的响应速度会变得极慢看起来就像是请求失败。解决方式是在工具端做一个状态探测发起请求前先确认主机处于“完全开机”状态如果是休眠状态就给出明确提示“主机已休眠请先唤醒”而不是空等超时让用户以为工具坏了。4.3 数据更新的双跑机制游戏数据不是静态的装新游戏、删游戏、DLC更新都意味着数据变化。单纯的“打开工具时拉一次”不够我在设计里加了两条更新路径一是手动刷新用户点击按钮立即重新同步游戏库数据二是定时轮询工具运行期间每隔一段时间自动拉一次增量状态。增量更新的关键是对比“游戏ID版本号”这个组合键只有组合键变化时才更新对应记录。这样数据库写入次数大幅减少界面也不会频繁跳动。关于云同步状态我还做了一层实验性读取在授权允许的前提下读取云端存档的同步时间用来补充本地存档时间线。这个功能并非所有情况下都能取到数据所以界面上会区分“本地记录”和“云端记录”两种来源。5. 跑通后的实际效果数据整理带来的从容感工具第一版跑通后我拿自己那台塞满了游戏的主机做了整库导入。结果有点震撼内容库里一共六十多款游戏其中超过一年没启动的就占了将近一半。这些冷档游戏加起来占了我SSD接近三分之一的空间平时完全感知不到它们的存在但容量报表一出来清理的优先级立刻清清楚楚。我还把存档时间线导成了月度摘要发现有三款游戏的主要存档停留在半年多以前而它们的游戏本体已经被我删了。幸亏有备份习惯不然后果就是老老实实从头打一遍。工具说得最多的一句提醒是“该游戏可能存在未备份的存档记录建议在删除前做一次备份确认。”这句话价值千金我自己的实际体会是它比任何空间清理工具都更能防止“手滑悲剧”。除了实用价值做AnyPS5这段经历也让我对“主机生态的开放性”有了更深的理解。厂商在设计官方App时其实已经提供了相当完整的数据读取能力。作为开发者我们需要做的不是去碰那些敏感的操作环节而是把“读数据”这件事做深做透在数据呈现和分析层面创造价值。只要找准这个定位整个开发过程就是一条非常干净的合规路径。6. 顺着这个项目还能继续做的三个方向6.1 游戏时长统计与年度报告官方系统其实记录了部分游戏的游玩时长数据只是展示得很零散。如果把这类数据也接进来再加上本地记录就可以生成玩家自己的年度报告玩得最多的游戏、总时长分布、哪个类型占比最高。这类内容做成可视化页面观赏性和实用性都很强。6.2 家庭共享与账号管理辅助多人共用一台主机的情况很常见每个用户有各自的游戏进度和存档状态。一个“用户维度”的资产总览能帮家庭用户搞清楚每个成员各自占用了多少空间、最近玩了什么。再加一个简单的额度提醒“家庭共享总空间快满了建议清理某账号下的冷档游戏”这类提示很能体现工具的智能感。6.3 二手买卖和换机前的数据体检很多玩家出手主机或整机换新时最担心的就是存档和账户数据交接不完整。如果工具能生成一份“资产清单报告”列出每款游戏是否包含存档、存档备份状态、有没有关联的追加内容那换机就会稳妥很多。这算是一个低频但刚需的实用场景做出来会很有口碑传播性。如果你也想做一个类似的小工具我的建议很直接先把“数据读取”这一层跑通不要一上来就铺界面和图表。第一版哪怕只有一个能看清单的命令行界面也比花哨的半成品有价值。等数据通道稳定了再慢慢加统计和分析作品的成长路径会顺很多。