
在docker中部署alas+redroid+ws-scrcpy

关于 Nvidia 显卡驱动
我个人不太推荐在NVIDIA平台上运行Redroid或WayDroid。
无论是 ReDroid 还是 waydroid, 想要使用英伟达显卡进行硬件加速都需要使用 QEMU+virtio-gpu 的虚拟机环境。
相较于后者来说,redroid 在 QEMU 模拟器中仍需要使用 docker 来启动。因此你真的想要用N卡来加速模拟器, 我更推荐你参考此处来搭建一个无头 waydroid 环境, 本文只针对 redroid 环境, 对 waydroid 不多做讨论。
不过二者都支持使用软件渲染,在不使用显卡的情况下也可以正常运行。此外 redroid 还支持N卡的开源驱动 nouveau, 如果你不需要用显卡来做其他图形计算可以考虑安装此驱动来进行硬件加速。
需要的工具
- Docker: 使用 Dcoker 部署 alas+redroid+ws-scrcpy。
- ReDroid: linux 上的 Android 模拟器。
- ws scrcpy: scrcpy 的 Web 版本,通过浏览器控制模拟器。
- AzurLaneAutoScript: 碧蓝航线自动化脚本。
- android-tools:用于在本地使用 adb 控制模拟器。
- (可选) 甲壳虫ADB助手: 在手机上控制模拟器。
示例环境
本文默认你能访问所有互联网环境。如果遇到任何问题,请搜索相关项目文档以及Google。
- 系统: ArchLinux
- 内核: linux-zen (6.12.4.zen1-1)
- 显卡: AMD Lucienne
- CPU: AMD Ryzen 7 5700U
- 显卡驱动: amdgpu
准备工作
安装Docker
直接安装 Docker Desktop 是安装 Docker 最方便的方式。如果你不想安装桌面应用,可以参考官方文档来安装。
1 | # 安装 |
安装android-tools
1 | $sudo pacman -S android-tools |
更换内核
关于N卡: 如果你不是nouveau驱动, 那么更换为 zen 内核时,需要安装对应的 dkms 版本的 nvidia 驱动。
1 | $sudo pacman -S linux-zen linux-zen-headers |
安装完成后,更新 grub。
1 | $sudo grub-mkconfig -o /boot/grub/grub.cfg |
部署
在部署时出现问题,请参考对应项目的官方文档、本文的注意事项和Google。
以下所有操作均在同一文件夹下进行
1 | $mkdir alas |
编写 ws-scrcpy 镜像
因为 ws scrcpy 并没有官方的 docker 镜像,因此我们需要自己构建。
1 | FROM node:16 |
创建 docker-compose.yml
先拉取 AzurLaneAutoScript 仓库到本地
1 | $git clone https://github.com/LmeSzinc/AzurLaneAutoScript.git |
然后在当前文件夹下创建docker-compose.yml
, ws-scrcpy 和 alas 都在 compose 中构建。
1 | services: |
修改配置
redroid 本身就是使用 docker 驱动的,因此官方文档中就提供了详细的配置选项,直接在 redroid 的 command
下添加即可。
想要修改 ws-scrcpy 的配置,需要将 docker-compose.yml 中的 ws-scrcpy
部分修改为如下。
1 | ws-scrcpy: |
然后在 ./scrcpy-web/config.yaml
中就可以定义 ws-scrcpy 的配置。关于具体的配置示例,请参考此处。
安装游戏
下载游戏到本地,然后通过 ADB 安装到redroid。
1 | $wget https://pkg.biligame.com/games/blhx_8.2.1_0820_1_20240830_041443_51682.apk |
启动
关于 Docker 和 docker-compose 的一切内容,请参考官方文档。
1 | $docker compose up -d |
启动后,访问 http://localhost:8000/
即可看到 ws-scrcpy 界面。访问 http://localhost:22267/
可看到 alas 界面。
alas 配置中,在 Alas > Alas设置 > 模拟器设置 > 模拟器Serial
下填入 redroid:5555
就能连接到模拟器了。
(可选) 在手机上访问 redroid
这里推荐 甲壳虫ADB助手,输入地址后可以通过adb连接到redroid,非常好用。
注意事项
ws-scrcpy 无法访问
ws-scrcpy 无法访问的大部分情况都是由于无法连接到模拟器导致的。
首先查看 ws-scrcpy 是否正常运行
1 | $docker logs wssc |
如果出现了如下提示,代表 ws-scrcpy 无法连接到 redroid。
1 | $docker logs wssc |
此时就需要判断是不是 redroid 无法启动,尝试在本地连接到 redroid
1 | $adb connect redroid:5555 |
如果本地连接成功,那么可以手动连接
1 | $docker exec -it wssc bash -c 'adb connect redroid:5555' |
redroid 无法启动/黑屏/scrcpy没有界面
在本地尝试 adb 连接 redroid 时,如果出现如下提示,代表 redroid 无法启动。
1 | failed to connect to redroid:5555 |
redroid 无法启动可能是多种原因导致的,例如显卡驱动、gpu模式、内核、Android版本等。具体情况请根据自己的设备环境仔细查询官方文档和issues。
这里提供这种几种可能的解决方案:
使用软件渲染
redroid 的默认显卡模式是 auto,他会优先调用本地的显卡进行渲染。如果你的显卡不支持就可能出现黑屏或无法启动的问题。
此时需要在 docker-compose.yml
中修改 redroid_gpu_node
为 guest
来使用软件渲染。
1 | redroid: |
如果还是无法解决问题,就代表当前不是显卡驱动导致的。
更换 Android 版本
Android 版本是个非常玄学的部分。对于不同的设备和游戏,可能只有某个版本的 Android 才能正常运行。
可以更换 redroid 的镜像来更换 Android 版本。需要注意的是不同的 Android 版本间的 data
文件夹不能通用。
redroid 目前支持的 Android 版本如下:
- Android 15 (
redroid/redroid:15.0.0-latest
) - Android 15 64bit only (
redroid/redroid:15.0.0_64only-latest
) - Android 14 (
redroid/redroid:14.0.0-latest
) - Android 14 64bit only (
redroid/redroid:14.0.0_64only-latest
) - Android 13 (
redroid/redroid:13.0.0-latest
) - Android 13 64bit only (
redroid/redroid:13.0.0_64only-latest
) - Android 12 (
redroid/redroid:12.0.0-latest
) - Android 12 64bit only (
redroid/redroid:12.0.0_64only-latest
) - Android 11 (
redroid/redroid:11.0.0-latest
) - Android 10 (
redroid/redroid:10.0.0-latest
) - Android 9 (
redroid/redroid:9.0.0-latest
) - Android 8.1 (
redroid/redroid:8.1.0-latest
)
redroid 没有网络
首先检查本地设备是否能正常访问互联网。
这通常是N卡驱动导致的,尝试将 redroid 更改为软件渲染查看是否能解决问题。
参考
https://github.com/NetrisTV/ws-scrcpy
https://github.com/remote-android/redroid-doc/issues/282#issuecomment-1339173984
https://github.com/remote-android/redroid-doc/issues/594