通过对 libhoudini 进行补丁实现在 Waydroid 上运行碧蓝档案国际服
前因后果
之前配置了一个 Waydroid ,试着运行过碧蓝档案,但失败了,运行碧蓝档案时画面很分裂,而且整体粉粉的,「 TOUCH TO START 」之后会崩溃。但今天发现这个 Issue 有了下文,@qwerty12356-wart解决了这个问题,大概的情况是 libhoudini 会通过 mmap(3p) 和 mprotect(3p) 阻止程序对某内存的写入请求,然后他给出了个脚本来修改这两个系统调用的参数,以实现允许写入。
作者说这些改动是从网易的 MuMu 模拟器里的 libhoudini 抄来的,这个 Issue 挂在 Waydroid 那里一年多了,而网易早就解决了这个问题,甚至根据作者的说法里面一个修改是 MuMu 专门为碧蓝档案做的,令人唏嘘。
TL;DR
NAS 的 N6000 性能不是很好,所以我又在我的笔记本上重装了个 Waydroid ,这次记录一下从安装 Waydroid 到运行碧蓝档案的过程
1. 安装 Waydroid
I use Arch, btw
ArchLinux 有专门的文档,最简单的方式是先换成 Zen 内核,然后直接装 waydroid-git 这个 AUR ,比如我用 paru :
1 | paru -S waydroid-git |
然后安装 Android 系统,之后要通过 Google Play Store 安装碧蓝档案,所以选择 GAPPS 版本:
1 | sudo waydroid init -s GAPPS |
2. 安装 Libhoudini
我用的 Intel ,所以选择 libhoudini ,先把 waydroid_script clone 下来:
1 | git clone https://github.com/casualsnek/waydroid_script |
安装 libhoudini :
1 | python ./main.py install libhoudini |
3. 安装补丁
去刚刚的 Issue 里找到那个补丁,比如保存为 fix.sh :
1 | chmod +x fix.sh |
4. 注册这台设备
启动 Waydroid :
1 | waydroid session start |
注意这句不是 fork && exit 类型的,可以把它交给你的 WM 管理,比如我用 Hyprland :
1 | hyprctl dispatch exec -- waydroid session start |
联网后 Google 会抱怨这台设备是 uncertified 的,最方便的可以用刚刚的 waydroid script :
1 | python ./main.py certified |
它会告诉你怎么做,过几分钟重新启动一下:
1 | waydroid session stop |
5. 一些初始化
Waydroid 有一些 Prop 可以配置,这时我的配置:
1 | # 使 App 可以窗口化 |
6. 碧蓝档案,启动!
如果一切正常的话,去 Google Play Store 搜索「 blue archive 」就能找到碧蓝档案国际服了,如果 Play Store 打不开说明你的网络有问题,或者注册这一步出了问题;如果搜索不到碧蓝档案说明 libhoudini 这一步有问题。无论如何,我是可以成功看到我的心奈小宝贝了:

废话
我的 UHD 630 开碧蓝档案的全高还是有点卡的,目测在 50 帧左右,但终于可以以 16 比 9 的尺寸填满我的屏幕了,之前一直通过 scrcpy 投屏,而我的手机是 2400x1080 这样奇怪的尺寸,而且 scrcpy 经过了视频编解码感觉不是特别清晰。目前的问题:
- 在我的 I+N 双显卡笔记本, ArchLinux+Hyprland 上有时会把 Hyprland 卡死甚至卡崩
Waydroid 用鼠标有时会有漂移已解决:禁用多窗口之后鼠标就完全不会卡顿/漂移了- 碧蓝档案真的是非常健康、正面的游戏…(目光上移、飘忽不定