市面上有很多厂商提供云手机服务,价格从几十到上百元每月一台。但如果对设备的稳定性、安全性、隐私性有要求的话,也可以完全自己动手打造一个。
开源的解决方案主要有两个一个是基于Anbox的Anbox Cloud,配置稍显复杂,小编在Orange Pi 5 上没有试验成功;另一个采用容器方案的ReDroid(Remote anDroid) ,也就是本期的主角了。
redroid介绍
redroid是GPU加速的AIC(Android In Cloud)解决方案。您可以在 Linux 主机中启动多个实例( Docker 、 podman 、 k8s 等)。 redroid 支持 arm64 和 amd64 架构。 redroid 适用于云游戏、虚拟化电话、自动化测试等。
目前支持的android版本及对应的docker镜像:
-
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 支持 arm 和 x86,但目前很多android应用都只适配了arm,要在x86上跑依赖arm的应用就需要用到模拟技术,性能肯定没法和原生相比,因此想要获得比较好的性能体验,可以上一个Arm的板子,目前Arm芯片中RK3588(S)性价比较高,小编手上有一个基于此芯片的Orange Pi 5, 使用的系统为Armbian 23.5 Jammy,接下来就以此为实验对象。
开始安装
在官方教程中,Ubuntu在运行redroid之前需要安装并启用一些内核模块(如下命令行),Armbian 23.5 Jammy是基于ubuntu,应该也安装下,但在试验中发现并不需要,应该系统内核集成了
## install required kernel modules
apt install linux-modules-extra-`uname -r`
modprobe binder_linux devices="binder,hwbinder,vndbinder"
modprobe ashmem_linux
更多Linux发行版的依赖安装教程参考官方的部署教程
相关依赖安装后,用以下docker命令即可创建一个android 12的容器。
docker run -itd --rm --privileged \
-v ~/data:/data \
-p 5555:5555 \
redroid/redroid:12.0.0-latest
通过adb连接到android系统,并通过scrcpy来操控,想远程(非局域网)操作,可以参照之前发表的文章 – 异地如何访问家庭网络
adb connect {ip}:5555
scrcpy -s {ip}:5555
通过adb安装AIDA查看系统信息,以及微信做测试
adb install AIDA64_1.91.apk
adb install weixin8040android2420_arm64_1.apk
系统信息
微信
常用的配置
## 使用自定义设置运行redroid
docker run -itd --rm --privileged \
--pull always \
-v ~/data:/data \
-p 5555:5555 \
redroid/redroid:12.0.0-latest \
androidboot.redroid_width=1080 \
androidboot.redroid_net_proxy_host=192.168.10.117 \
androidboot.redroid_net_proxy_port=8080 \
androidboot.redroid_net_proxy_type=static \
androidboot.redroid_height=1920 \
androidboot.redroid_dpi=480 \
ro.product.brand=Sony \
ro.product.device=XQ-BC72 \
ro.product.model=XQ-BC72 \
ro.product.name=XQ-BC72 \
ro.product.manufacturer=Sony
一些常用参数的说明
参数 | 描述 | 默认值 |
---|---|---|
androidboot.redroid_width |
显示宽度 | 720 |
androidboot.redroid_height |
显示高度 | 1280 |
androidboot.redroid_fps |
显示帧率 | 30(启用 GPU时) 15 (未启用 GPU时) |
androidboot.redroid_dpi |
显示分辨率 | 320 |
androidboot.redroid_net_proxy_type |
代理类型: static , pac , none , unassigned; 一般用static |
|
androidboot.redroid_net_proxy_host |
代理类型为static时,此处填http代理的IP或域名 | |
androidboot.redroid_net_proxy_port |
http代理端口 | 3128 |
androidboot.redroid_gpu_mode |
guest : 使用软件渲染host : 使用GPU加速渲染auto : 自动检测 |
auto |
ro.xxx |
允许覆盖 ro.xxx 属性;例如设置 ro.secure=0 ,则默认提供 root adb shell;或改变设备的信息,如设备型号、设备名之类的 |
通过以上对redroid的介绍,及其安装与配置说明,即可打造属于自己的云手机服务,但由于大多数设备不支持GPU加速,所以界面还是一点卡的,做一些自动化测试或跑一些计划任务还是不错的,后面有机会再讲一下在orange pi 5上的GPU加速方案。
-END-
作者|dev2ex 保贝狗后端开发工程师