以前跑手游脚本用的Unraid【1】 + Windows虚拟机【2】 + Android模拟器【3】嵌套方案【4】,这个方案能跑通。但是首先手游很卡,其次浪费了大量资源。后来发现了一个叫做Redroid【5】的项目,这个项目将android系统容器化【6】,效率呢也大幅提升。
这里也是将Redroid成功在unraid上跑通了,效果图:


整个流畅性还是比Windows套安卓模拟器好的,接下来介绍一下如何部署。
配置Unraid
参考文献:https://forums.unraid.net/topic/149453-redroid-on-unraid/
首先根据文献指引,在7.1.0后的unraid可以直接通过编辑Syslinux【8】配置来开启PSI【9】功能,具体做法如下:

随后我们在“Unraid OS”项下添加 "psi=1"

随后重启unraid,重启完毕后进入Shell【10】,通过这个指令确认开启是否成功。
root@[deleted]:~# cat /proc/pressure/*
some avg10=0.00 avg60=0.00 avg300=0.00 total=459559255
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
some avg10=0.00 avg60=0.00 avg300=0.06 total=671040703
full avg10=0.00 avg60=0.00 avg300=0.06 total=656378817
some avg10=0.00 avg60=0.00 avg300=0.00 total=5025023
full avg10=0.00 avg60=0.00 avg300=0.00 total=4950939
输出了类似的文本就说明成功启用了PSI,接下来就可以拉redroid容器了。
拉Docker Image
这里使用docker-compose【13】一把梭
services:
redroid:
image: redroid/redroid:14.0.0-latest
stdin_open: true
tty: true
privileged: true
ports:
- [deleted]:5555:5555 # 此处为adb端口开放地址,请注意把控安全风险
volumes:
- /mnt/user/appdata/redroid:/data # 所有数据的存放目录
command:
- androidboot.redroid_width=720 # 分辨率,根据你脚本去设置
- androidboot.redroid_height=1280
- androidboot.redroid_dpi=320
- androidboot.redroid_fps=60
- androidboot.redroid_gpu_mode=host # 启用硬件加速,host->GPU加速
- ro.product.cpu.abilist0=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi # 設定libndk相關
- ro.product.cpu.abilist64=x86_64,arm64-v8a
- ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
- ro.dalvik.vm.isa.arm=x86
- ro.dalvik.vm.isa.arm64=x86_64
- ro.enable.native.bridge.exec=1
- ro.dalvik.vm.native.bridge=libndk_translation.so
- ro.ndk_translation.version=0.2.2
拉取镜像启动即可。
验证
验证的话使用一个很经典的adb控手机的软件——scrcpy【14】来控制就可以了。
Invalid GitHub repository path: Genymobile/scrcpy/
直接下载windows版本的releases【15】,里面呢自带一个adb,我们右键打开shell连上即可。
PS C:\Users\type6\Desktop\scrcpy-win64-v3.3.4> ./adb.exe connect 172.16.255.2:5555
already connected to 172.16.255.2:5555
PS C:\Users\type6\Desktop\scrcpy-win64-v3.3.4> .\scrcpy.exe
如果此时报和audio【16】(音频)相关的错误,可以考虑禁用音频功能,即: .\scrcpy.exe --no-audio
PS C:\Users\type6\Desktop\scrcpy-win64-v3.3.4> ./adb.exe connect 172.16.255.2:5555
already connected to 172.16.255.2:5555
PS C:\Users\type6\Desktop\scrcpy-win64-v3.3.4> .\scrcpy.exe --no-audio
scrcpy 3.3.4
INFO: ADB device found:
INFO: --> (tcpip) 172.16.255.2:5555 device redroid14_x86_64
C:\Users\type6\Desktop\scrcpy-win64-v3.3.4\scrcpy-server: 1 file pushed, 0 skipped. 96.7 MB/s (90980 bytes in 0.001s)
[server] INFO: Device: [redroid] redroid redroid14_x86_64 (Android 14)
INFO: Renderer: direct3d
INFO: Texture: 1280x720
接下来你就可以看到你的容器化Android系统的GUI【17】界面了。
给容器化系统装App
这个镜像很精简,Chrome都是没有的,不过docker好处是可以很容易的在宿主系统下载APK【18】。
直接在unraid终端里面cd到这个路径(你需要根据你的docker-compose文件做修改): /mnt/user/appdata/redroid/media/0/Download/ 随后wget【19】一个apk就行了。
需要注意的是沟槽的【20】权限还在追你,你下完后需要修改权限。权限的GID/UID【21】不一定和我一样,所以这里我介绍下怎么获取。
首先在scrcpy里面操控android打开Files App【22】,就是文件管理器。在Download目录里面新建个文件夹,完事了回到unraid的shell,cd到 /mnt/user/appdata/redroid/media/0/Download/
root@Ayabe:/mnt/user/appdata/redroid/media/0/Download# cd /mnt/user/appdata/redroid/media/0/Download/
root@Ayabe:/mnt/user/appdata/redroid/media/0/Download# ls -lh
total 2.0G
-rw-rw----+ 1 root root 2.0G Mar 5 08:42 Reverse1999_Bluepoch_1000.apk
drwx--S---+ 1 10079 10079 6 Mar 8 17:29 Test/
root@Ayabe:/mnt/user/appdata/redroid/media/0/Download#
这里看到我们新建的文件夹GID / UID是10079,用chown【23】修改即可。
root@Ayabe:/mnt/user/appdata/redroid/media/0/Download# chown 10079:10079 Reverse1999_Bluepoch_1000.apk
root@Ayabe:/mnt/user/appdata/redroid/media/0/Download# ls -lh
total 2.0G
-rw-rw----+ 1 10079 10079 2.0G Mar 5 08:42 Reverse1999_Bluepoch_1000.apk
drwx--S---+ 1 10079 10079 6 Mar 8 17:29 Test/
接下来就和你用手机一样安装就行了。
Comments NOTHING