Eden 稳定版和 nightly 的存档为什么对不上: 用户档案 ID 与 UID 字节逆序
我把 Eden 的主力版本从稳定版换成了 nightly。它和稳定版包名不同, 可以直接共存, 游戏也都能正常打开。但进去之后, 之前所有的存档一个都读不到, 每个游戏都像第一次玩。我第一反应是 nightly 把数据目录清了, 或者存档被覆盖了, 赶紧去翻文件。
文件都在。少的不是存档, 是 nightly 去错了地方找。
两个构建共用游戏, 但不共用用户档案
Eden 把 Switch 的存档放在数据目录的 nand/user/save/ 下。这条路径不是只有一层, 它的结构大致是 nand/user/save/0000000000000000/<用户档案ID>/<TitleID>/, 中间那层是用户档案。稳定版和 nightly 是两个独立安装的应用, 各自的数据目录分开, 更关键的是: nightly 首次启动时会自己生成一个新的用户档案 ID, 和稳定版那个没有任何关系。
我这边稳定版的活动档案是 D2AE7D815565D5C93F432C7C74A7DD6A, nightly 自动生成的是 173CB8FB1F16348366B4CABB88A445D9。存档文件都在 nightly 的数据目录里(从稳定版拷过来之后), 但 nightly 只会去它自己那个活动档案目录里找游戏存档, 于是看不到。
存档目录名从哪来
那个看起来像随机十六进制串的档案目录名, 其实不是随机的。日志里能观察到, 它来自用户档案的 UID, 并且是 UID 的字节逆序排列——同一段身份数据, 换个字节序就成了目录名。两个构建只要各自生成了新 UID, 目录名就必然不同, 这也是为什么换构建、甚至 nightly 自己重新初始化之后, 存档会"对不上"。理解了这一点, 就不会再把它当成文件损坏。
为什么直接拷存档会失效
最容易踩的坑是: 把稳定版的 save/ 整个拷到 nightly 的 save/, 以为就完事了。结果 nightly 里依然读不到。原因是稳定版拷贝过去的目录名是 D2AE7D..., 而 nightly 的活动档案是 173CB8FB..., 内容进了库, 但没进 nightly 真正会查的那个抽屉。所以迁移必须做两段覆盖: 先把稳定版的存档根整体带过来, 再把稳定版活动档案里的内容, 再拷进 nightly 的活动档案目录。
flowchart TB
A["稳定版<br/>活动档案 D2AE7D..."] --> B["拷存档根目录<br/>进入 nightly"]
C["nightly<br/>自动生成档案 173CB8FB..."] --> D["nightly 只在自己的活动档案里找存档"]
B --> E["把 D2AE7D 里的内容<br/>再拷进 173CB8FB"]
D --> E
E --> F["修好 777 / 666 权限"]
F --> G["存档就位"]迁移的实际命令
落到命令上就是三段。第一段把稳定版所有档案拷进 nightly 的存档根(同名档案会自然合并); 第二段把 nightly 里那份 D2AE7D... 的内容, 拷进 nightly 真正在用的 173CB8FB...; 第三段修权限, 因为 Android/data 下的文件经拷贝后属主是 shell, 得让 App 能读写。
# 1. 稳定版所有档案 → nightly 同名档案
cp -rf <stable>/nand/user/save/. <nightly>/nand/user/save/
# 2. 主档案内容 → nightly 活动档案
cp -rf <nightly>/nand/user/save/0000000000000000/D2AE7D815565D5C93F432C7C74A7DD6A/. \
<nightly>/nand/user/save/0000000000000000/173CB8FB1F16348366B4CABB88A445D9/
# 3. 权限:目录 777、文件 666,否则 App 打不开或存不进
find <nightly>/nand/user/save -type d -exec chmod 777 {} \;
find <nightly>/nand/user/save -type f -exec chmod 666 {} \;做完之后我点了几个游戏验证: 稳定版和 nightly 的存档数都是 72, 抽了《尼尔》《荒野之息》《王国之泪》《马车8》逐个对文件数, 一致。这一步的核对很重要, 因为拷贝看起来成功、实际少几个文件的情况并不少见。
提醒: 存档"消失"还有另一种完全不同的原因
还有一种现象长得一模一样、原因却完全不同, 值得分开说。如果在游戏属性的 Add-ons 里, 把 Update 或 DLC 这两行也一起取消了勾选, Eden 会禁用游戏更新和 DLC, 游戏退回本体低版本运行, 于是读不了高版本创建的存档——表现同样是"进游戏存档没了"。但这时候存档文件一个都没丢, 只是游戏版本不对。区分方法就是先去 nand/user/save/ 看文件在不在: 在, 那就是版本问题, 把 Update/DLC 重新勾上即可; 不在, 才是真的没迁移过来。
另外要有个预期管理: nightly 的活动档案 ID 是它第一次启动时生成的, 与稳定版无关。如果以后 nightly 重新生成了档案(比如清了应用数据), 存档会再次失配, 需要按同样的双重覆盖再迁一次。所以最稳的做法是保留一份 nand/user/save/ 的备份, 迁移随时可重来。
这台掌机上的存档问题, 大多数时候都不是"数据丢了", 而是"数据还在、只是应用去错了目录找"。把用户档案这层搞清楚, 稳定版和 nightly 之间来回切就不再是问题。