甲骨文云 · 2023年 3月 14日 0

在甲骨文云ARM机上使用ReDroid搭建云手机

测试系统为Ubuntu20.04 ARM64

总体思路:Docker+ReDroid搭建云手机,然后设置IP白名单用scrcpy控制。

https://github.com/remote-android/redroid-doc

https://github.com/Genymobile/scrcpy

上命令,先安装Docker

curl -sSL https://get.docker.com/ | sh

然后配置ReDroid需要的环境

apt install linux-modules-extra-`uname -r`
modprobe binder_linux devices="binder,hwbinder,vndbinder"
modprobe ashmem_linux
cat > /etc/modules-load.d/redroid.conf <<EOF
binder_linux
ashmem_linux
EOF
cat > /etc/modprobe.d/redroid.conf <<EOF
options binder_linux devices="binder,hwbinder,vndbinder"
EOF
chmod +x /etc/modules-load.d/redroid.conf
chmod +x /etc/modprobe.d/redroid.conf

然后只需要拉取运行ReDroid的Docker镜像

docker run --name moniqi1 \
    -itd \
    --memory-swappiness=0 \
    --privileged --pull always \
    -v /root/test/data1:/data \
    -p 55550:5555 \
    redroid/redroid:13.0.0-arm64 \
    ro.secure=0 \
    ro.product.model=Xiaomi \
    ro.product.brand=Xiaomi \
    ro.product.name=Xiaomi \
    ro.product.device=Xiaomi \
    ro.product.board=Xiaomi \
    androidboot.hardware=mt6891 ro.boot.hwc=GLOBAL    ro.ril.oem.imei=8615888888888 ro.ril.oem.imei1=8615888888888 ro.ril.oem.imei2=8613888888888 ro.ril.miui.imei0=8613888888888 ro.product.manufacturer=Xiaomi ro.build.product=chopin \
    redroid.width=720 redroid.height=1280 \
    redroid.gpu.mode=guest \
    --rm

docker ps #查看正在运行的容器信息

docker stop moniqi1 #关闭容器

docker start moniqi1 #开启容器

docker restart moniqi1 #重启容器

docker rm moniqi1 #删除容器

rm -rf /root/test/data1 #删除容器的文件,从而彻底删除

用iptables实现仅白名单IP可连接此云手机

iptables -I DOCKER-USER -i enp0s3 -p tcp -m conntrack --ctorigdstport 55550 ! -s <你的IP> -j DROP
netfilter-persistent save

最后用scrcpy来连接控制,打开scrcpy自带的open_a_terminal_here.bat输入以下

adb connect <你的ip:端口>

ADB连接成功后即可控制

scrcpy.exe -s <你的ip:端口> --max-size 768 --bit-rate 892K --max-fps 15 --window-title '模拟器1'

使用中遇到的问题以及解决方案

  • 无法使用v2rayng等等网络代理软件

进入adb shell,输入mv /dev/net/tun /dev/ 就可以使用了,但是不要全局代理,否则会掉线。

  • 创建多个ReDroid容器后,之前创建的容器都无法管理文件

使用docker cp命令将容器内的/vendor/etc/init/redroid.common.rc文件复制出来,然后在文件末尾添加以下代码:

on late-init
    umount /sys/fs/fuse/connections

再使用docker cp命令把该文件替换回去,然后重启所有容器(如果不想重启,得在创建容器的时候使用create而不是run命令,只创建不运行,等修改完/vendor/etc/init/redroid.common.rc再用docker start启动)