在虚拟机中安装 Android-x86 虚拟机
记录在 Oracle VirtualBox 中安装 Android-x86 虚拟机以及在 KVM/Qemu 中安装 Bliss OS 虚拟机。
想要安装 Android 虚拟机的目的很简单,就是想试验一些不敢直接在手机上安装的 APK 。
在 Oracle VirtualBox 中创建虚拟机
最开始使用 Oracle VirtualBox 安装 Android-x86 。当时就发现 Android-x86 的 public ISO 已经很久不更新了,但是还是没有选择更换系统。
SourceForge android-x86 Files 中 Release 9.0 已经是 2022 年的了。
创建虚拟机的步骤和创建普通虚拟机一样:
- 访问 Android-x86 官方网站,下载 ISO 文件。
- 新建虚拟机,各种配置常规即可。
- 启动安装:这里就有些坑了。
Reference:
- Official: Installation Howto | Android-x86
- Virtualbox安装Android虚拟机
- Vbox安装安卓X86过程及部分注意事项
- vmware安装android系统教程
Auto Installation
Android-x86 官方提供了 Auto Installation 选项辅助安装。
If you want to use Android-x86 as the only OS in your device, you may choose “Auto Installation” under the “Advanced options”.
经笔者测试, Advanced options 下的 Auto Installation 可以方便、快速、正确地完成系统安装,无须手动操作。
Manual Installation
大致流程如下:
Installation - Install Android-x86 to harddiskCreate/Modify partitions- Do you want to use GPT?
No NEW -> Primary -> Enter -> Enter(新建分区 -> 主分区 -> 默认 ->默认)- 选择
Bootable,选择Write,然后Quit - 选择磁盘 -> ext4
- Do you want to install boot loader GRUB?
yes - Do you want to install /system directory as read-write?
yes(不知道有什么用,但是反正不占太多空间) - 移除 ISO 后 Reboot ,如果你忘记移除 ISO 了,重启之后会再次进入最开始的系统安装界面,移除重启即可。
解决 “无 GUI” / “detecting android-x86 found at /dev/sda1 卡死” 问题
安装系统倒是简单,但是对于 x86 机器,很有可能重启后出现没有 GUI 或者卡死在 detecting android-x86 found at /dev/sda1 的问题。这个很有可能是图形栈不兼容导致的,大致解决步骤如下:
- 重启选择
Debug启动 mount -o remount,rw /mnt:因为后面要编辑这里的文件,可能是只读的(那样 vi 会提示你文件 read only )vi /mnt/grub/ment.lst(没有nano… )- 文件里面有 4 个部分:
Android-x86 9.0-r2 Android-x86 9.0-r2 (Debug mode) Android-x86 9.0-r2 (Debug nomodeset) Android-x86 9.0-r2 (Debug video=LVDS-1:d) - 可以看到这就是启动界面的 4 个启动选项。编辑第一个正常启动选项,将语句
kernel /android-9.0-r2/kernel quiet root=/dev/ram0 SRC=/android-9.0-r2中的quiet改成nomodeset即可。
- 文件里面有 4 个部分:
- Reboot
最后成功启动后 VirtualBox 会给 Android 虚拟机虚拟出一个 VirtWifi ,好像虚拟机里会显示这个 WIFI “已连接但网络不可用”,实际上网络应该是可用的,不用管这个报错。
在 KVM 中安装 Bliss OS
时隔 1 年,笔者又来进行重复的操作了。只是这次换了虚拟机软件以及系统,以及有远为强大的 ChatGPT 辅助。
安装 Bliss OS 的流程大差不差,但是这里有一点比较坑,需要自己划出一个引导盘,否则就会像我一样一直卡在 Booting from Hard Disk... 。具体来说,就是要在分区时创造两个分区:
/dev/sda1
512 MB
FAT32
EFI System Partition
/dev/sda2
ext4
BlissOS
当然这样的话 KVM 可以设置 UEFI Boot 。重启之后,我们可能会遇到 UEFI 找不到可执行的 EFI bootloader 的问题,进入 UEFI Interactive Shell ,即下图:

这里需要手动找到 EFI 引导文件,并执行。我这里是 FS0:\EFI\BlissOS\BOOTX64.EFI ,可以将它放到标准 fallback 路径 FS0:\EFI\BOOT\BOOTX64.EFI 中。
接着又遇到了与 Android-x86 类似的问题,卡死没有输出。编辑启动参数去掉 quiet 后发现系统循环报错:

ChatGPT 判断,这更像是图形栈启动失败,导致 surfaceflinger/system UI 一直起不来。BlissOS 官方文档对“启动动画始终不出现”的情况,明确建议先加 nomodeset 强制走软件渲染/兼容模式;BlissOS 14.10 还支持 HWACCEL=0 和 ANGLE/SwiftShader 作为虚拟机里的软件渲染方案1。
使用和 Android-x86 一样的解决方案,在启动参数中添加 nomodeset ,问题解决。ChatGPT 判断,原因是 BlissOS 本身就是 Android-x86 这一技术路线的延伸。在 PC 上,它不是像手机 Android 那样面对固定的 GPU/HAL,而是要处理 Linux DRM/KMS、Mesa、Gralloc、Hardware Composer 等图形栈。到了 QEMU/KVM,又多了一层虚拟 GPU。某些组合下内核能启动、Android userspace 也能起来,但图形栈初始化失败,于是就会出现我们刚才看到的 surfaceflinger 等组件反复异常。nomodeset 本质上就是告诉内核:不要正常启用 GPU 的 Kernel Mode Setting,走更保守的显示/软件渲染路径。代价主要是图形性能会差一些,可以研究别的不那么保守的解决方案。
使用问题
虽然成功安装了 Android 虚拟机,但是在真正开始尝试试验 APK 时,还是会面临一些问题。
一个直接的问题是,并不方便实现共享剪切板、共享文件夹。当然对于已经把 APK 拿到手的情况,直接使用 adb 安装即可。
更致命的问题是,如果 APK 只提供 arm 平台的库,那在 x86 平台将无法运行。当然,Bliss OS 提供 ARM Translation 功能,但是这对于笔者这种普通用户,无疑是进一步的认知负担。
可能更为简洁直接的方案是:准备一台便宜的 Android ARM64 手机作为专门测试设备,不登录个人账户、不插个人 SIM、不放私人数据、与重要局域网隔离。APK 的兼容性最好,也不用处理 x86→ARM translation。