前言

群里有人讨论docker自建云手机,对于这玩意儿,我只想说:我十几年前就玩过了,开一文分享一些干货。


要点

  1. docker自建云手机,安卓手机本质上是KVM虚拟化
  1. 当前系统需要支持虚拟化,无论是支持开启了虚拟化的物理计算机,或者是启用了嵌套虚拟化的虚拟机。当前的docker需要能访问到kvm管理权限。虽然看起来是docker镜像,但是镜像本质仅仅是方便的封装打包,本质上只是帮助你更方便的创建了安卓x86虚拟机

  1. 本质是安卓x86,很多东西搞不了,但是可以搞arm的
  1. 本质上是安卓X86,因此我说十几年前就玩过了。X86架构运行绝大多数程序都是没问题的,主要是涉及GPU加速部分无法调用执行。例如涉及摄像头调用还好,主要是视频播放,3D游戏基本上不用考虑了,肯定是不可以的。

  2. 虽然这些docker能够让你自建的云手机看起来更像三星或者谷歌亲儿子,但是他们可是X86的。作为一个垃圾佬,有一些方式可以让兼容性稍微好一些,其实可以跑在arm服务器,或者部署在那些arm方案的机顶盒

  3. 举个例子,比如某64核的arm 2.0G准系统,海鲜市场实际价格才900,DDR4 RECC服务器条虽然目前还是比RECC DDR3贵一倍,但是多少相比普通DDR4能便宜一些。16G*8攒个128G也没多少钱,再加上显卡,能干一堆真正高性能的云手机了。
    这机器我很久以前实际买了俩,当年以CentOS 7 arm64系统配合kvm虚拟化,手动部署的方式(其实相同配置bash for不比docker更快?有点追求不得自定义下原始镜像?)一次性启动了64个8核8G云手机(母机得吃一点吧,CPU宝贵不能浪费CPU在超售虚开内存上,所以实际分配7800MB)开机瞬间服务器嗷嗷叫温度马上上去了,第一次失败了,显卡显存不够,魔改PCIE外接了一张。
    这机器还原生支持多个m.2盘子,去年测试的时候(这是最近一次的测试)安兔兔跑分总体上被20%+的设备虐了。当然RX470 8G ASUS单DVI还是比最强的移动端显卡上一个数量级。
    此服务器厂商文档不公开,BIOS升级都不开放的,不清楚板子的pcie是什么水平,PM981A 1T独写均只有1.2GB的样子,创建的云手机里独写速度都是950MB+的样子。
    腾讯IM和阿里试图变成IM但是飞升炸裂的软件均能够正常登录使用木有问题;打包为PAD的镜像也能够正常登录PAD版本;未安装任一腾讯IM的状态,和平精英能够正常扫码登录,不会匹配硬件玩家。但是毕竟是这种玩具,封号后果自负。同样,在三方云手机玩游戏,我总感觉会被封号?七八年前我记得用腾讯是阻止安卓X86登录绿色图标的那款IM软件的,能登录,但是没有任何联系人。

  4. 如果你不需要开那么多,那么也有更便宜的方案,比如RK3399,比如四颗RK3399集成在一张主板的那种板子,或者普通的机顶盒什么的,只要你能解决系统部署问题,都能玩。
    怕刷机麻烦的话各种国产SBC更方便,刷镜像到内存卡,慢是慢了点,把安卓镜像丢nvme设备就行了,例如rockpi 4b,RK3399带一个M.2。虽然内存很小,不如直接跑安卓镜像了。

  5. GPS、定位我目前不知道怎么搞搞不来

  6. 大部分应用都将网线连接识别为WiFi接入,目前来说大致上没有什么问题。安装某团APP,拿自己副卡注册能够正常领到不要钱包邮到家的蓝牙小音箱,1分钱的小药箱。同上上上条结尾的描述,仅仅是测试一把,封号后果自负。主要看各厂商对新用户的定义,一般就IP,设备,号码就得了。
    虽然这玩意儿的设备名称什么的不伦不类,但是在下沉市场,有没有一种可能,杂牌手机也有相当的市场,对于这些地方不精通数码的绝大多数普通人,运营商最低的合约机算是顶配了。
    小县城看到了实体店小米之家?不不不,前年我竟然见到了红米K40山寨版,这种手机都有人山寨。。。不知道互联网厂商用尽全力发展的真实的新用户,有多少人第一次是以这种设备见面的。不好意思过渡把玩(安装能验机的app),如果我没猜错的话,那玩意儿的真实安卓版本应该是安卓6.x,大部分常用应用其实没什么不能运行的了。配置是8+128的,但是应该也是倍增了的。

  7. 高版本的安卓镜像跟手机一样,给虚拟机增加了蓝牙之后,蓝牙耳机就能听到声音了,应该也能正常通话了(撸来的镜像这个部分没处理好,点击通话就会卡住),但是不调用通话组件的即时通讯软件需要授予“附近设备”的权限,然后才能选择用蓝牙耳机通话,否则会使用系统默认的模拟声音输入输出设备,双向没声音。

  8. 网络之类的一切设备的模拟消耗的是母机的CPU,不占用虚拟机本身的CPU配额。本地dns替换一下speedtest就近节点的域名解析结果,网速测试能跑出17Gbps。物理层是板载双万兆team组网与100G口的服务器测试。白嫖了朋友IDC机房的机柜位置,蹭了核心交换机一个100G口放了NAS,蹭了几个万兆口和半个机柜位置瞎折腾的。半柜IDC托管怎么说每个月也得算2000了,堪比一个IDC运维一个月的工资,感谢感谢。真是奢侈的实践环境。

  1. 正因为docker自建云手机本质上还是kvm虚拟机,没什么神奇的,但是docker hub速度感人。所以我下载了常见的一些docker镜像,然后编写了更简单的方式docker compose拉起,省的改配置了。使用方法非常简单。但是同原运行方式,这个安卓虚拟机是没有显卡的,打算玩游戏的洗洗睡吧。
  1. 选择需要下载的镜像,例如名称为三星某手机,安卓12的镜像
  2. docker load -i xxxx.tar.gz
  3. docker compose up -d
  4. 大概就是这样就搞定了,同样是通过网页访问控制,建议开adbip以scrcpy控制更流畅。具体看readme.txt

镜像上传到了百度网盘以及电信、移动的网盘。百度最持久可靠稳定,新用户偶然下载速度还是不错的。电信上传蛋疼,下载速度畅快,但是偶尔吃资源不让分享,移动的联通宽带下载速度不行,自己择优选择网盘下载吧。为什么没有联通、腾讯、阿里的之类的?10G容量,政策朝令夕改,永不限速的字也P掉了。