在 PVE 上折腾云手机的小记录
也算不上是太正经的折腾,只是记录一下考虑过以及实施过的几个方向而已,而且更重要的是,最后『相对好用』的方案其实很奇葩:在Windows里面跑国产安卓模拟器,所以看一乐就好。
至于为什么我会这么选,原因很简单:很多情况下,这么折腾不单纯只是技术问题,具体情况,下面会说。

1. 前言
一般情况下这种折腾都是要配图的,但是因为这次折腾时间跨度过大,因此很多截图都没有留存下来——甚至是引言里的那幅图,也可以看见左侧VM列表只有光秃秃一台Windows 10而已,是因为别的方案都已经被删掉了,只留下了这个,否则硬盘空间占用实在是过大。
云手机其实并不是什么新鲜的概念,至少早在七八年前,市面上就已经有相关产品,直到现在也依然有不少公司经营此类业务。客户群体无外乎就是电商营销,游戏挂机,稳定运行某些手机APP,测试环境,等等,其本质上和挂机宝(一种无公网IP,上行较低,安装普通Windows系统,仅提供一两个管理端口的云服务器)是一样的,只不过运行平台变成了安卓而已。

还有部分供应商,比如华为,是面向大批量用户直接出售配好基础软件的宿主机(华为那个略微有些优势,因为是用ARM的CPU直接跑的),用户购买宿主机之后就可以在上面手动创建几十路的云手机,然后通过ADB等方式连接使用。

我是一个『用金钱换金钱』的人,比如说,我已经在给家里的服务器付电费和网费了,就不额外付网盘会员费了——这也是上面展示的Windows虚拟机最大用途,里面有一个百度网盘客户端,随时随地都可以挂机下载,下一晚上总能下完,下不完就两个晚上——所以对于云手机来说,自然也是这样办。
2. Android-x86?
此处的Android-x86,指的是这个发行版。如果是泛指某一类运行于x86平台的安卓系统,则称呼为『x86的Android』。
安卓最大的特点其实就在于,他是基于ARM生态的。虽然确实存在Android-x86这个非官方的发行版,但老实说,既然整个安卓生态都是基于ARM的,那么光有x86系统,跑不起来ARM软件(严格来说,是ARM指令集的so动态库,DEX里面的二进制指令是可以跨平台的),那也是没用的。虽然部分开源软件,确实还在提供x86的Android的安装包,但是目前主流的商业软件也基本上放弃了对于x86的支持,自然也就无法运行了。
所以这就出现了一个问题:x86版本的Android,必然需要自带一个转译层,把ARM指令转译为x86指令才能运行。原版Android-x86对此的支持到底如何,也是众说纷纭。根据资料来看,当时人们的普遍做法是,要么从ChromeOS中手动提取转译器,要么从微软的WSA中提取转译器,由于这里的转译器libhoudini.so并不开源,似乎也没有明确的许可证信息,预分发/预包含可能会引来纠纷,因此假如Android-x86不提供此支持,可能就是出于这方面的考虑。
此外,Android-x86最后一次发版已经是2020年,而且是基于2018年发布的Android 9。这么说吧,安卓8到9基本上就是目前大多数软件可以运行的下限了,如果想要好一些的体验,至少10+。正如上面链接所述,Distrowatch已经把Android-x86列为『停止维护』,所以也就没必要再去折腾他了。
3. Bliss OS?
Android-x86消失之后,市面上也不是没有其他版本的x86的安卓,Bliss OS便是其中之一。因为之前安装过,但卸载了,为了撰写本节内容,笔者特意重装了一次BlissOS,因此下面的截图会看到PVE版本在9.0.3和9.1.1之间横跳,属于正常现象。
镜像:16.9.7-x86_64-OFFICIAL-gapps-20241011网上有不少人演示过,基于Bliss OS去搭建云手机。但正如你所见,自从五月份Bliss OS官方宣布闭关开发之后,截止到目前(2025年11月29日),Bliss OS的官网都处于『没什么用但是还吊着一口气』的状态,没有更多信息,也没有下载链接。所以如果你想尝鲜,就只能到SourceForge,去下载之前留下来的镜像来体验。
在安装并体验之后,觉得并不值得保留,因为碰到的问题有:
- 网络无法配置:他会把网络识别为以太网,能用倒是能用,甚至外面一看,还能拿到v6地址。但安卓对以太网的支持也就到此为止了——或者说,安卓似乎就没有针对以太网连接做过优化。系统设置里面并没有『以太网』这个设置选项(安卓4.0的时期似乎是有的,那时候安卓还支持PPPoE连接,或者ROOT之后也可以通过某些程序发起),自然也就无法配置静态地址之类的东西。此外,部分APP看到你WiFi没开数据没开蓝牙没开,可能会直接判定为无网络连接,因而拒绝服务。
- Web控制台下,通知栏拉不上去:PVE的网页控制台,本质上是VNC,因此会有各种奇奇怪怪的情况,比如通知栏一旦拉下来,就很难再拉上去,表现为能用鼠标拖着往上走,但是一旦松开鼠标,就会重新掉下来。使用Scrcpy连接则无此问题。
- 一言难尽的Scrcpy:Scrcpy是通过USB调试去控制安卓手机的方式(据说很多『安卓手机远程桌面』都是Scrcpy套壳),本来挺美好的,但是在BlissOS上就不是如此了。目前SF上提供的镜像,打包的时候还包含了当时为了解决问题所留下的Hack,导致Scrcpy无法连接,需要根据这位老哥的做法,每次重启后执行一段神奇小命令(KernelSU里面要给shell开root权限),然后才能连上。连上之后,你会发现没有声音,那是因为不知道又是什么神奇小原因,音频部分无权限,鬼知道要怎么解决。
- 硬件加速功能接近残废:老实说我不确定这个是谁的问题,虚拟机还是什么,官方教程似乎更多的是把这玩意用于实体机。但是在PVE里面,如果显卡类型选择『默认』,就无法开机;选择VirtIO,无法播放视频,选择VirtGL,同样无法播放视频,且浏览器也会卡死/花屏。有部分老哥会选择直通一张显卡进去,这个笔者并未测试,因为下面的问题,导致这个测试没啥意义了:
- 无法运行需要的东西:我需要云手机,主要是运行一些『装在主力机上比较占体积但是好像又不是很想经常打开』的APP,比如引言中插图的明日方舟。在Bliss OS上,此程序无法运行,似乎转译层确实很忙,但不知道在忙什么:

综合以上种种原因,笔者还是决定,放弃尝试Bliss OS(至少在他闭关开发结束之前是如此)
4. Waydroid
Waydroid是在LXC里面创建安卓容器的方式。虽然理论上来说,通过这个脚本(已存档,且似乎不支持PVE 9.x)可以实现PVE上原生运行,但官方文档里面似乎并没有对此类方式做直接支持。
老实说,这玩意我并没有去尝试,因为根据资料来看,想让ARM的APP运行起来,其麻烦程度也并不在小,也是需要执行辅助脚本来安装转译层。考虑到这一点,再加上Linux平台上还可能存在一些兼容性问题,就放弃选择这条路了。
5. Windows + 国产模拟器
最后还是选择了这个方案。如果有什么问题,套娃就行了,还不行,多套一层。

其实这已经有点认输的意味在里面了,毕竟这种方式是保证能用的,只需要在PVE上提前开嵌套虚拟化,CPU类型改成Host(据说9.1.1版本支持对嵌套虚拟化的更细粒度控制,暂未测试),多分点核心和内存给他,并在VM里面的模拟器里适当加大内存和CPU分配,就行了。硬件加速方面,其实惨不忍睹:本来就弱的UHD 630核显,还得用GVT-g劈成五份,也就是说VM实际拿到的只有五分之一张显卡,显存什么的也是大大缩水。

最后的结果是....能玩,分辨率很低(估计480p),帧率明显看出来不够,但还勉强算流畅。考虑到套娃层数,这样的结果其实已经很不错了。
因为这个做法没什么技术含量,所以就不再多提技术方面的事情了。
6. 技术?
其实折腾了这么久,最后倒是得出来一个有趣的结论:云手机抛开技术问题不谈,风控也是一个重要问题,根据网上资料,这么玩很容易触发微信的模拟器检测,YouTube的无法播放,以及Twitter的封号,之类的事情。当然这个情况其实不止云手机独有,就算是虚拟机里面的Windows也会有此类困境,表现为使用了内核级反作弊的游戏无法运行,等等。当然还有笔者的例子,也就是前段时间说的,rooted手机与QQ的问题。
有一句废话叫做『技术的尽头不是技术』,就完美契合目前的场景:一方面,确实有很多人使用虚拟机和模拟器等程序去搞各种黑灰产,比如游戏工作室,刷初始号的,刷各种分享的,云云;另一方面,也确实存在像笔者这样的神奇需求,比如我想在电脑上玩手机游戏。但总体而言,说句不好听的,前者的『影响力』比后者的要大,搞不好规模也比后者的要大,于是后者的需求在很多情况下其实都是被无视的。在这样的情况下,技术在某些时候已经无能为力,因为已经变成了行政与制度(甚至社会工程学)的问题了。
对于国产模拟器而言,很多情况下极有可能与游戏厂商等有合作,可以开点白名单什么的,减少风控的影响,毕竟你模拟器卖点就在这里,结果用户来了打开一看,被风控了,那有什么用?此外,某些模拟器会自带一个『游戏中心』之类的东西,里面的游戏基本上也是类似情况(有不少游戏就是通过和模拟器厂商合作,略微钻钻空子,实现只有单个版号的情况下的PC端发布),甚至可能因为这是『自带』的游戏,是用户的第一印象,所以会更加上心。
此外,就算你能搞定风控问题,正如上面的折腾过程所见,也有一大堆神奇小命令和神奇小工具在等着你。一句话就是,能用,不等于好用,输入那条命令之后当然能用Scrcpy连接上去了,但是没有音频,而且每次重启都需要重新输入命令,这就是典型的能用但不好用了。很多情况下这种事情并非完全不能通过技术手段解决,例如说我可以写个bat,把这些命令都写进去脚本里,用的时候直接双击就行。但本质上,这种解决方式需要额外投入时间和精力:评估是否值得投入,同样也不是技术问题了。
7. 写在最后
其实上述折腾过程可以说是没有意义的,因为如果我真的需要运行这个游戏,我完全可以在我本地电脑上直接开模拟器,毕竟主力机的性能可以碾压隔壁杂物间的这台PVE母鸡。
不过嘛,折腾也并非全无乐趣,至少也能学到点什么,这就行了。
(完)
看了很多你的文章,看起来你还是学生,但是你对网络的了解超出了绝大多数从事这个行业的工作人员,非常了不起。
我从事加速网络相关工作,最近几年也增加了云手机的开发工作,真的非常巧了。
看到你这篇文章,想发表下看法(其他网络相关比较敏感):云手机当前来说已经不是虚拟化、运行效率的问题了,最长期投入的成本就是风控,因此你如果想实现在“一个闲置资源”上跑明日方舟之类的游戏,那么付费购买云手机就是为了风控对抗给云手机平台分担成本,这一点华为也是不保障风控的(超大客户另算)。
所以,如果不想支出每月4-6美刀的租金租用云手机,那么最好的方式可能是:用自己或家人闲置的手机来玩,然后使用Scrcpy(有能力可以搭建一个webrtc)来实现远程云手机。
我有时间会继续看完你的全部博文,真的不错。
谢谢支持
风控问题,目前来说可以说是最大的问题,毕竟他就是一个典型的『干坏事的人比干好事的人还要多』的场景,对厂家来说,最低成本的就是宁可杀错不要放过,包括前段时间手机QQ的root问题,你档案心知肚明,你啥都没干,但厂家不信你啊,没办法
真正走实体机去当云手机用,又是另一个路数了,毕竟很多情况下,他都要涉及到硬件改造,改直通供电(不然电池会鼓起来),这一点还是略微有些难度的——当然,据说手机在root之后可以安装部分模块来实现软定义的直通供电,但这就回到了上面说的风控问题了
只能说我现在是作为一个普通用户,我只能选择WindowS加国产模拟器这条路,因为这是一个久经考验的方法了(之前我舍友就这么玩)