通过对 libhoudini 进行补丁实现在 Waydroid 上运行碧蓝档案国际服

通过对 libhoudini 进行补丁实现在 Waydroid 上运行碧蓝档案国际服

RayAlto OP

前因后果

之前配置了一个 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
2
3
4
5
6
git clone https://github.com/casualsnek/waydroid_script
# 装好环境
cd waydroid_script
python -m venv venv
source venv/bin/active
pip install -r requirements.txt

安装 libhoudini :

1
python ./main.py install libhoudini

3. 安装补丁

刚刚的 Issue 里 找到那个补丁,比如保存为 fix.sh :

1
2
chmod +x fix.sh
sudo ./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
2
waydroid session stop
waydroid session start

5. 一些初始化

Waydroid 有一些 Prop 可以配置,这时我的配置:

1
2
3
4
5
6
7
8
9
10
11
12
# 使 App 可以窗口化
#waydroid prop set persist.waydroid.multi_windows true # 玩游戏不建议开启
# 开了多窗口之后鼠标会发生卡顿/漂移

# Waydroid 不会根据窗口大小自动调整自己的大小,需要这样定死,这里的大小是 scale 后的尺寸(如果你设置了 scale )
waydroid prop set persist.waydroid.width 1920
waydroid prop set persist.waydroid.height 1080
# 如果你也在用 tiling wm ,最好让 waydroid 直接 fullscreen 避免奇怪的问题,比如我用 Hyprland :
# windowrulev2 = fullscreen, class:^(Waydroid)$, title:^(Waydroid)$

# 很多应用会报没有网络,这样可以解决一部分问题
waydroid prop set persist.waydroid.fake_wifi '*'

6. 碧蓝档案,启动!

如果一切正常的话,去 Google Play Store 搜索「 blue archive 」就能找到碧蓝档案国际服了,如果 Play Store 打不开说明你的网络有问题,或者注册这一步出了问题;如果搜索不到碧蓝档案说明 libhoudini 这一步有问题。无论如何,我是可以成功看到我可可爱爱的可奈小宝贝了:

在 Waydroid 上运行碧蓝档案国际服的截图

废话

我的 UHD 630 开碧蓝档案的全高还是有点卡的,目测在 50 帧左右,但终于可以以 16 比 9 的尺寸填满我的屏幕了,之前一直通过 scrcpy 投屏,而我的手机是 2400x1080 这样奇怪的尺寸,而且 scrcpy 经过了视频编解码感觉不是特别清晰。目前的问题:

  • 在我的 I+N 双显卡笔记本, ArchLinux+Hyprland 上有时会把 Hyprland 卡死甚至卡崩
  • Waydroid 用鼠标有时会有漂移 已解决:禁用多窗口之后鼠标就完全不会卡顿/漂移了
  • 碧蓝档案真的是非常健康、正面的游戏…(目光上移、飘忽不定