前言
Waydroid是一个在Linux上运行Android容器的项目,在Arch Linux下可以很方便得通过AUR或者archlinuxcn
软件源安装。(Arch Linux的官方内核均已启用binder
模块,因此Waydroid开箱即用)笔者并不经常使用Waydroid,而且也不喜欢Waydroid将大量启动文件放到KDE Plasma的起动器中,因此笔者选择将Waydroid运行在virt-manager管理的QEMU虚拟机中,虚拟机事实上是直通笔者的移动硬盘块设备作为存储,没有使用虚拟机镜像文件。
然而,笔者发现直接在QEMU虚拟机中运行Waydroid时,只有底栏图标显示,却没有任何界面显示;而直接在裸机上运行完全相同的系统环境时Waydroid则可以正常显示界面。因此,笔者推断是Waydroid需要依赖OpenGL等GPU加速。根据Waydroid的官方文档,Waydroid默认需要启用GPU虚拟化才能正常工作,当然,也可以通过在/var/lib/waydroid/waydroid.cfg
的[properties]
中设置ro.hardware.gralloc=default
与ro.hardware.egl=swiftshader
来禁用GPU加速,但这会导致Waydroid的性能大幅下降。
笔者之前的虚拟机配置中并没有启用GPU虚拟化,这也导致即使是在虚拟机中运行KDE Plasma桌面环境时,桌面环境的性能也不够好,Konsole的日志输出甚至肉眼可见一行一行地刷新。可见,虚拟机的GPU虚拟化配置是有必要的。因此,笔者不推荐在Waydroid中禁用GPU加速,应当尽量启用GPU虚拟化以满足Waydroid的需求。
宿主机配置
安装
在Arch Linux下,安装virt-manager和QEMU的相关软件包:
sudo pacman -S --needed qemu-full virt-manager
如果不需要qemu-full
的所有功能,可以只安装qemu-desktop
。
配置
安装完成后,启动virt-manager
程序。可以参考笔者之前的博客中的方法完成基本配置。
这样按照默认方式配置完成后,还需要额外配置GPU虚拟化。
在virt-manager
中,选择要配置的虚拟机,点击右键,选择打开
,然后在虚拟机窗口中点击右上角的显示
按钮,选择显卡
,型号选择virtio
,并勾选下方的3D加速
选项,点击应用
。
![]() |
---|
在显卡配置中启用3D加速 |
随后,配置显示协议
。类型选择为Spice 服务器
,监听类型选择为无
,并勾选下方的OpenGL
选项,选择对应的宿主显卡设备。
![]() |
---|
在显示协议中启用OpenGL |
完成上述配置后,点击应用
保存配置。
虚拟机配置
进入虚拟机。在Arch Linux下,可以通过AUR或者archlinuxcn
软件源安装Waydroid:
paru -S --needed waydroid waydroid-image
如果需要使用GApps,可以使用waydroid-image-gapps
镜像:
paru -S --needed waydroid waydroid-image-gapps
启用Waydroid服务:
sudo systemctl enable --now waydroid-container.service
随后,初始化Waydroid:
sudo waydroid init
如果需要使用GApps,可以使用sudo waydroid init -s GAPPS
命令。
现在,Waydroid已经可以在虚拟机中运行了。首次启动Waydroid时,会运行Android系统的开机动画,随后会进入Android系统的桌面界面,而这些过程需要依赖GPU虚拟化。
可以使用命令启动GUI:
waydroid show-full-ui
![]() |
---|
在virt-manager的虚拟机Linux中“套娃”运行的Waydroid |
也可以从启动器中选择Android应用。