我们之前曾经介绍过Android项目,就是在ESXi服务器上直接装了一台Android虚拟机(既然Win11不支持Android,那就直接装一台Android-X86吧),当时的系统版本比较低,其实到现在也不高。
最近几年吧,跨境电商异常火爆,这就衍生了一些特殊需求,比如说虚拟手机,或者叫云手机,用途大家都清楚。当然,很多云厂商也都提供了云手机的服务,比如阿里云的无影云手机:
当然,以上只是基础资源的价格,不包含公网服务。
如果想在本地用,也有现成的产品,听说比较多的应该是魔云腾,不过也不便宜,8核RK3588处理器+16 GB运行内存+256 GB系统盘的价格要1588元,有点小贵。
不过既然是云手机,那GitHub必然有开源项目,我们一搜就能搜到redroid(Remote anDroid)这个项目,这是一个支持GPU加速的AIC(Android In Cloud,云端安卓)解决方案,支持ARM64和AMD64架构,可以在x86服务器上运行安卓系统;支持在Linux主机中以Docker、podman、k8s等方式启动多个实例。
安装也很简单,解决好环境依赖之后,直接拉取docker容器,然后运行就可以了。
接下来,我们来实操一下。
首先,我们需要用到一台Ubuntu系统(Ubuntu 22.04 LTS服务器版本安装演示),并且安装好Docker引擎(Ubuntu 22.04.4安装Docker引擎)。
然后,检查并安装所依赖内核模块:
apt install linux-modules-extra-$(uname -r)
modprobe binder_linux devices="binder,hwbinder,vndbinder"
如果系统内核低于5.18,还需要加载ashmem_linux模块。
modprobe ashmem_linux
目前最新的Android系统是15,那接下来,我们先运行一个64位的Android 14系统,命令如下:
docker run -itd --rm --privileged
--pull always
-v ~/data14:/data
-p 5555:5555
--name redroid14
redroid/redroid:14.0.0_64only-latest
经过前面一段时间对Docker的学习(Docker run命令完全指南:一文掌握Docker run的隐藏功能与避坑指南),我们理解一下上面的配置:
其中,-itd是-i(--interactive)、-t(--tty)、-d(--detach)三个参数的组合。-i用于保持容器的标准输入(STDIN)开放,允许与容器交互;-t用于分配一个伪终端(TTY),使容器的输入/输出行为类似于本地终端;-d用于容器在后台运行(守护模式),并返回容器 ID。
--rm表示退出容器时自动移除该容器。
--privileged表示赋予容器完全特权,使其可以访问所有主机设备(/dev下的硬件设备),并绕过Linux安全机制。
--pull always表示运行时Docker会强制从镜像仓库拉取最新版本的镜像文件,覆盖本地缓存的旧版本镜像,而不是使用本地镜像。
-v ~/data14:/data表示将主机的~/data14目录挂载到容器内的/data路径,实现双向数据共享。
-p 5555:5555表示将容器内的5555端口发布到主机的5555端口,我们前面学习ADB的时候就知道了这个5555端口用于ADB远程调试()。
--name redroid14表示指定容器名称为redroid14,后续可以通过该名称管理此容器。
redroid/redroid:14.0.0_64only-latest则是我们需要拉取的docker镜像名称,跟项目简介的标签相对应,对应关系如下:
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)
等待命令运行完成后,会自动拉起Docker容器。查看Docker镜像和容器信息,可以看到本次下载的Android 14镜像的文件大小为709 MB,解压之后有1.65 GB;运行中的Docker容器映射了TCP端口5555。
接下来,我们就可以用scrcpy工具来连接redroid云手机了(不使用USB,Windows电脑如何通过网络操控Android手机?)。首先使用ADB连接手机,然后用scrcpy远程到手机上。
使用Scrcpy工具远程操作:
adb connect 192.168.1.77:5555
scrcpy -s 192.168.1.77:5555
在弹出的桌面窗口中查看系统信息,显示Android版本为14,型号为redroid14_x86_64_only。
然后我们试着装个小红书。
安装没有问题,可以用。
当然,系统官方给出的这种一次性云手机使用方式我们并不喜欢,那我们还可以使用下载好的镜像直接拉起云手机容器,比如用本地镜像拉起一台Android 15的云手机。
docker run -itd --rm --privileged
-v ~/data15:/data
-p 5556:5555
--name redroid15
redroid/redroid:15.0.0_64only-latest
再连接试一下。
当然,我们还可以使用Escrcpy工具,能以界面形式展示连接信息。
点击开始镜像按钮就可以开始操作了。
最后,我们看一下系统资源使用情况。
当运行两台云手机时,CPU利用率约为160 %,系统负载在7核左右,内存使用量为3.47 GB。
然后我们停掉Android 15这台手机。
可以看到,因为配置了--rm参数,所以在停止容器时,该容器也被自动删除了,再看一下系统资源使用情况。
当运行一台云手机时,CPU利用率约为150 %,但是系统负载降到了5核左右,内存使用量为2.54 GB。
最后,我们再停掉Android 14这台手机。
可以看到,现在没有容器在运行了,而且都被自动删除了,再看一下系统资源使用情况。
当没有云手机运行时,CPU利用率约为10 %,但是系统负载显示为1核左右,内存使用量为583 MB。
由此,我们推算,一台云手机运行的资源占用大约为2核CPU、1.5 GB内存。这么看来,自己在电脑上装一台虚拟机也能玩一玩了。
***推荐阅读***
原文始发于微信公众号(铁军哥):云手机技术揭秘!低成本实现1台电脑变百部虚拟手机实战
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论