先看下效果:

android-x86-demo.gif

可以看到运行很流畅,由于gif压缩小了尺寸,Aida64的信息界面看不清,显卡是virtGL,支持OpenGL,3D加速由宿主机Intel UHD 630提供,最后的游戏演示可看出很流程。

1. 前言

1.1 为什么需要Android

我日常使用的是一个直通了RTX2060s(矿卡)的Win11虚拟机,众所周知,在虚拟机里使用模拟器性能巨差,我试过夜神模拟器,启动慢不说,游戏电竞帧数,连抖音都卡顿明显。所以一个能在Hypevision中运行的安卓系统就是一个很好的选择。

1.2 选择哪一种

现阶段能作为选择的有3种方案:

    1. ChromeOS:

      首当其冲的就是基于Chromium OS的ChromeOS及其他发行版如国内的FydeOS,这系统号称老电影福音,具有完整的桌面环境并兼容Android应用,可惜对于显卡的兼容性不是很好,而虚拟机能使用3D加速的显卡,除了显卡直通外还有一种就是最近一两年积极维护的VirtualGL,所以ChromeOS在VirtualGL下运行是否可行还得画个问号,后面再折腾。

    1. 容器化方案 -Waydroid or Redroid:

      第二种方案就是借助容器化cgroupsnamespace 等内核技术的容器化方案,这种方案启动快速,可使用宿主机硬件资源,也能使用宿主机GPU进行3D加速, 但是对于Nvidia的显卡兼容性很差。运用pve创建一个lxc容器来运行docker redroid容器也能运行,后续折腾一下这个方案。

    1. Android-x86:

      Android-x86 在AOSP的基础上增加x86平台的支持,可通过native-bridge转义arm指令从而运行arm应用,同样称为老电脑福音,GPU兼容性较好,兼容VirtualGL ,今天我们就来在pve中尝试一下这个系统有什么妙处。

2. 安装Android-x86

2.1 镜像下载

打开Android-x86 官网,官网提供了2个下载分流,按需选择,我这里选择SourceForge

image.png

共有一下版本:

image.png

最新版本Release 9.0 基于Android 9.0 Pie,也是下载次数最多的版本,我们选择此版本。

image.png

选择 64 位ISO版本

2.2 创建虚拟机

创建虚拟机

image.png

选择刚才下载的镜像

image.png

选择 q35 机型和 OVMF 安装,显卡选择VirGL GPU

VirGL GPU 需要宿主机有有效的render节点设备,也就是说你的显卡需要正确的驱动了才能运行,通过ls /dev/dri 查看是否有 render* 字样。

image.png

存储给到32G即可,如果需要安装大型游戏可以给多一点。

image.png

安卓比较依赖CPU资源,如果运行的是arm应用更需要CPU的转译,所以这里给到 10 vCPU

image.png

内存给到 8G

image.png

Android-x86做了虚拟机的兼容,所以这里网卡选择效能最高的 VirtIO

image.png

点击完成之后选择“硬件” -> “添加音频设备”, 后端驱动器选择 “无”

image.png

最终配置文件如下:

audio0: device=ich9-intel-hda,driver=none
bios: ovmf
boot: order=scsi0;ide2;net0
cores: 10
cpu: host
efidisk0: local-vzb:114/vm-114-disk-0.qcow2,efitype=4m,pre-enrolled-keys=1,size=528K
ide2: ugreen:iso/android-x86_64-9.0-r2.iso,media=cdrom,size=921M
machine: q35
memory: 8192
meta: creation-qemu=7.1.0,ctime=1700718616
name: Android-x86-efi
net0: virtio=F6:B1:0A:BA:FD:5E,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsi0: local-lvm:vm-114-disk-0,iothread=1,size=32G
scsihw: virtio-scsi-single
smbios1: uuid=29493e94-6604-4e93-bee8-ab92aa93f6b4
sockets: 1
vga: virtio-gl
vmgenid: f2d8f76e-fad9-49cf-b957-2bf9bb1d11d1

2.3 安装

启动安装,通过 noVNC 连接安装程序, 也可以选第一项 Live 模式测试一下兼容性

image.png

我们直接选择高级选项自动安装到指定硬盘

image.png

安装程序自动发现了我们的虚拟硬盘

image.png

选择 Yes 数据自动写入硬盘(图床抽风没传上)

安装成功,运行 Android-x86 (图床抽风没传上)

3. 设置Android-x86

3.1 初始化

第一次开机开始初始化设置

image

语言选择中文

image.png

Wifi网络先跳过

image.png

时间默认即可

image.png

接受谷歌服务的协议

image

保护功能是不开的,所以这里也不用选了

image.png

选择默认主屏幕模式:

  • 任务栏 - 基于浮窗的任务栏模式,类似桌面模式,但是使用体验很差。
  • Quickstep - 传统安卓桌面,鼠标模拟点击操作,还有抽屉式应用,用过安卓的会比较熟悉这个模式,按需选择。

    这里选了始终之后如果要切换默认模式在设置 -> 应用和通知 -> 默认应用里面改回来即可

image.png

看桌面环境是带了 GApp 的,不用安装谷歌服务了,且默认 adbd 是开启的。

image.png

3.2 设置静态ip

设置 -> 网络和互联网 -> WLAN 点击 VirtWifi 连接,安卓会通过DHCP获取ip,一般获得的ip会显示无法访问互联网,这是因为我们的网络无法访问谷歌404网站,接下来我们修改这个网络的属性,改为固定ip,我还要修改一下魔法网关。

image.png

点击网络详情 -> 点击编辑

image.png

高级选项 -> IP设置选择 “静态”

image.png

按实际情况填好IP和网关、DNS之后保存。

保存好之后并不是立即生效的,可关开WLAN重新连接网络之后即可,如果你的网络环境可直接访问Google的话会弹出账号登录同步通讯录等谷歌服务,登录之后即可通过 Google Play 下载应用。

3.3 Scrcpy连接Android

scrcpy 是安卓远程连接的优秀开源项目,基于adb连接,可在PC端通过鼠标操作安卓,具有低时延,高帧率,可定制连接质量,可传输音频(需要Android 11以上版本)等一系列优点,具体可查看其文档 scrcpy支持 LinuxMacWindows 三大平台,这里以 Windows 11 平台为例

  • 安装 Scrcpy

Scrcpy 依赖 adb 工具,先安装 adb

winget install --id=Google.PlatformTools  -e

再安装 Scrcpy

winget install --id=Genymobile.scrcpy  -e

adb 连接 Android-x86

adb connect 192.168.5.5

image.png

第一个设备是我的手机,忽略。

scrcpy 连接

scrcpy -e

image.png

-e 参数指定通过tcpip协议连接,如果你只有一个设备连接到adb可不用这个参数。

Scrcpy 2.0 开始原生支持音频传输,但是需要 Android 11 以上。sndcpy 需要Android 10以上,所以音频传输是无解的,因为Android 10才加入了音频分享的API,具体可查看这个Issue

image.png

3.4 开启arm兼容模式

默认只能运行兼容x86架构的app,运行arm架构的app需要开启arm兼容模式,开启arm转译。从foxi 大佬的网盘下载库文件。

wget https://foxi.buduanwang.vip/pan/foxi/download/andriod/houdini9_y.zip

解压之后上传到 Androi-x86

unzip.exe houdini9_y.zip
adb -e push .\houdini9_y.sfs /sdcard/Download

开启nativebridge

adb -e shell
su
cd sdcard/Download/
enable_nativebridge

以上没有什么错误输出就好了,然后再在设置界面打开兼容模式

image.png

安装一下抖音运行测试一下:

正常运行!

image.png

4. 性能测试

4.1 查看硬件参数

我们通过AIda64安卓版查看参数

adb.exe -e install Downloads\aida64-v196.apk

查看系统参数

image.png

处理器识别有问题,不过cpu运行是正常的

image.png

显卡VirGl,支持 OpenGL ES 3.0

image.png

4.2 Geekbench 6 查看CPU效能

通过Geekbench运行测试看下CPU性能如何

image.png

单核性能接近Pixel 7 Pro,多核甚至优于小米13,哈哈,当然这里就是图一乐,不同指令集的CPU肯定不能这么比。

image.png

image.png

4.3 验证GPU加速是否成功

为了查看虚拟机是否用上了宿主机的GPU资源,我们查看一下GPU的负载情况:

  • Intel GPU 宿主机安装 apt install intel-gpu-tools
intel_gpu_top

image.png

随意操作 Android-x86 看到intel的GPU 3D渲染功能正常运行

5. 结语

Android-x86 在虚拟机上的表现可以说超出了我的预期,大部分的app均可流畅运行,且性能开销尚可,只是9.0版本的Android不支持音频的传输,所以用来当作云手机的效果会大打折扣,只能用于一些挂机app或者游戏的运行,另外有一个类似的Android-x86发行版 BlissOS 有基于Android 12的版本,下期可以尝试这个版本是否可解决音频传输的问题,让我拥有一个x86的安卓云手机。