论如何把云服务器变成云手机,redroid的基本使用教程
有一天我需要做一些安卓应用的自动化与可编程化操作,但是用自己的手机还是不够方便。于是乎,我突然想到了一个方案:云服务器啊!云服不就是用来干这个活的嘛,简直再合适不过了,自动化计算必备啊,而且稳定性比直接用手机还要高。并且还有独立公网IP,这是手机用流量无法比拟的。于是今天来聊聊如何把云服务器变成手机。
前置工作
以腾讯云为例,根据我踩过的坑可以总结出来,操作系统最好为Ubuntu。因为debian我试过了,老是因为缺少内核而启动不了或者干脆连不上。博主这里采用的是Ubuntu Server 24.04 LTS 64bit版本。这并非是在说debian不好,Linux发行版众多,内核也很多都不一样。实测乌班图22和24兼容比较好。
关于配置方面,如果不需要arm转译,2h2g就行。但是如果一旦上转译,就需要至少2h4g了。系统盘不低于40GB
我们使用的解决方案是redroid,它是一个安卓系统模拟的容器化解决方案。优点是不需要安装虚拟机程序,也不需要进行硬件虚拟化,这对于云服务器这类没法实现“虚拟机系统里面套虚拟机安卓”的情况来说非常利好。因为它是容器方案,所以我们第一步必须先安装docker。
关于docker的安装教程不再赘述,这也不是本教程的重点。如果你想的话,这里是一个docker的一键安装脚本。
安装
docker安装好后,就可以使用以下命令来安装redroid本体。
1 | docker pull docker.1panel.live/teddynight/redroid:latest |
由于某些原因,docker的官方源dockerhub已经被国内防火墙屏蔽了(俗称“被墙了”)。因此该命令指定了docker.1panel.live镜像,未来可能随时会过期,不通就尝试换一个。
另外该redroid并非官方源,而是来自teddynight的一个分支版本。采用这个是因为现有教程用着比较广泛,出现问题网上搜基本上很多都是来自这个分支的。
该应用包体在1.3GB左右,即使有镜像站的加持也得下一会儿,等待即可。
与此同时,你还需要安装adb来实现连接redroid实例:
1 | sudo apt install adb |
部署
安装好后,使用下面的这个命令来启动你的实例:
1 | docker run -itd --rm --privileged \ |
注意:如果你下载的时候改了镜像,别忘了把命令里的docker.1panel.live/teddynight/redroid:latest换成对应的。
对于--rm参数,指定了以后会在容器停止运行后删除容器。如果你不需要自动删除只需要把它去掉;
对于-p 5555:5555是指定了容器内的5555端口映射到容器外的5555端口。这里5555端口是adb的无线调试默认端口号,如果需要自定义端口,只需要把容器内的5555端口映射到你想要连接到容器内adb的外部端口即可。
其他的就是指定system.prop参数,做过安卓开发的应该差不多都知道。
启动完成后,你就可以试试用adb连接它了:
1 | adb connect 127.0.0.1:5555 |
期望的输出是connected to 127.0.0.1:5555
我们也可以看一下当前连接到的设备:
1 | adb devices |
如果出现这个你就成功了:
1 | List of devides attached |
如果出现offine,那就代表没完全成功,底层通讯没问题但是无法实际连接。
如果啥都没有列出,更是没成功。
以上两种情况大部分都是服务器Linux内核的问题。这也是为什么我推荐大家用乌班图的原因,毕竟我就是通过换操作系统成功了(笑)当然你也可以手动去修内核
成功以后,你就可以去云服防火墙后台去放行5555端口。最后在手机上装个安卓控输入服务器公网IP就能看到云手机的画面了。关于这个软件可以去搜索引擎搜scrcpy手机版安全提醒:由于adb连接没有用户身份认证,任何人只要拿到了你的服务器公网IP地址就能随意连接你的云手机。为了安全考虑,请尝试在服务器内进行操作或远程操作完成后关闭端口的对外访问
关于内核
其实导致redroid各种失败的原因基本上也就在内核层面有问题。它需要特定的Linux内核来支持它的运行。但是一些云厂商或者云厂商提供的操作系统镜像的内核不符合条件。这种时候你就需要去自己编译内核或者下载通用内核。
主要内核模块:binder_linux、ashmem_linux(可选?)
下面是一些相关的教程,可以自己去试一下:
1.https://www.nodeseek.com/post-148264-1
2.https://github.com/remote-android/redroid-doc/issues/73
操作完成后记得重启一下redroid实例
注意事项
redroid里面的浏览器不能下载东西,不过它自带的谷歌浏览器可能可以(但是只能谷歌搜索);但是因为墙的问题所以国内依然用不了它,当你尝试直接输入域名或者链接的话就会带到Test WebView里,这里可是下载不了文件的。所以如果需要在内部下载文件的话,需要提前安装一个浏览器进去。在服务器内使用adb install 文件来安装包。建议用via浏览器,因为它原生支持x86指令集可以装了直接用。
绝大多数的云服务器厂商的云服都是x86_64架构,而目前绝大多数的手机app都是aarch64架构。如果你需要使用手机app的话,需要套一层x86到arm64的转译(不转译即使是能安装也根本就打不开)。由于arm64本身转义到x86就会多吃这部分指令翻译的算力,所以最终表现出来的性能会比在arm设备上要丢失20%左右。转译指令正是这篇教程所没涉及到的部分,因为这只是一篇基础使用教程而已。大家可以去自行研究下这块。




