Linux 桌面已经能够完成绝大多数日常工作,但仍然存在一个长期缺口:许多服务只提供 Android 或 iOS 客户端,没有原生 Linux 版本。

一些应用可以通过网页版替代,但也有不少程序依赖移动端通知、扫码、触摸界面、Android 专用协议或移动平台生态。过去遇到这类需求时,通常只能准备一台实体安卓设备,或者在 Linux 中运行 Android 虚拟机。

Waydroid 提供了第三种方案:直接在 Linux 容器中运行一套完整的 Android 系统,并将其中的应用整合进 Linux 桌面。

截至 2026 年 7 月,Waydroid 官方最新版本为 1.6.3,当前系统镜像基于 Android 13 和 LineageOS 20。Arch Linux 也已经将 Waydroid 直接收入官方 Extra 仓库,不再需要通过 AUR 安装。

Waydroid 是什么

Waydroid 并不是传统意义上的安卓模拟器。

传统模拟器往往需要模拟一套完整硬件,例如虚拟 CPU、显卡、主板、存储设备和网络设备。Android 系统运行在虚拟硬件之上,Linux 主机与 Android 客体之间存在完整的虚拟化层。

Waydroid 采用的是容器方案。它利用 Linux namespaces 隔离用户、进程、网络、挂载点和 IPC 等资源,在容器中启动一套完整的 Android 用户空间。Android 与宿主 Linux 共用同一个内核,并通过 Binder 接口访问 Android 所需的系统服务。官方项目说明中列出的 namespaces 包括 user、pid、uts、net、mount 和 ipc。

可以把它粗略理解为:

传统虚拟机:

Linux 内核
└── 虚拟硬件
    └── Android 内核
        └── Android 系统和应用

Waydroid:

Linux 内核
├── Linux 桌面和应用
└── Android 容器
    └── Android 系统和应用

因为没有再启动一套完整的 Android 内核,也不需要模拟整台手机硬件,Waydroid 通常比完整 Android 虚拟机更轻。Android 容器还能更直接地使用宿主机的 CPU、内存和图形硬件。

不过,“容器”不等于“所有应用都会原生兼容”。应用的 CPU 架构、设备认证、传感器依赖和 DRM 检查仍然可能造成限制。

Waydroid 与 Android Studio 模拟器有什么不同

Android Studio Emulator 主要面向 Android 开发人员。它适合测试不同 Android 版本、分辨率、CPU 架构和设备状态,也能模拟摄像头、位置、网络和传感器。

Waydroid 更偏向日常使用。

两者的目标并不完全相同:

对比项目WaydroidAndroid Studio Emulator
主要用途日常运行 Android 应用Android 开发和测试
运行方式Linux 容器完整虚拟设备
系统开销通常较低通常较高
桌面整合Android 应用可进入 Linux 菜单主要显示在模拟器窗口中
Android 版本选择受 Waydroid 镜像限制可创建多种虚拟设备
硬件模拟有限较完整
隔离程度容器级虚拟机级
使用难度正常运行后较简单配置项目和设备相对复杂

如果目标只是打开聊天、阅读、媒体或其他常见 Android 应用,Waydroid 通常更接近理想状态。

如果目标是开发 APK、调试不同 API Level,或者需要测试多种虚拟手机,Android Studio Emulator 更合适。

为什么 Waydroid 更适合 Wayland

Waydroid 官方将它定义为面向 Wayland 桌面环境的 Android 容器方案。Android 应用的窗口通过 Wayland 与 Linux 桌面合成器连接,因此现代 KDE Plasma、GNOME、Sway、Hyprland 等 Wayland 会话更加适合直接运行 Waydroid。

在 Wayland 会话下,Waydroid 可以采用两种主要显示模式。

第一种是完整界面模式:

waydroid show-full-ui

这种模式会显示一整个 Android 桌面,使用体验接近平板电脑。

第二种是多窗口模式。启用后,每个 Android 应用都可以拥有独立窗口,与普通 Linux 应用一起出现在任务栏和桌面切换器中:

waydroid prop set persist.waydroid.multi_windows true
waydroid session stop

重新启动 Waydroid 会话后,多窗口设置即可生效。官方安装文档同时提供了完整界面和多窗口模式的启动方法。

X11 能否运行 Waydroid

Waydroid 并不是为纯 X11 会话设计的。

在 X11 桌面中,可以先运行 Weston 等嵌套 Wayland 合成器,再把 Waydroid 放进这个 Wayland 窗口中,但这属于兼容性绕行方案。窗口整合、剪贴板、输入法、分辨率和会话恢复都可能变得更复杂。

因此,准备长期使用 Waydroid时,直接切换到 KDE Plasma Wayland 或 GNOME Wayland,通常比在 X11 中增加一层嵌套合成器更加合理。

不过,切换显示协议前应检查绘图板、屏幕旋转、局部映射、远程控制、自动化工具和输入法等依赖 X11 的功能。旧的 xsetwacom 旋转及屏幕区域映射脚本不会在 Wayland 中继续生效,必须改用桌面环境和 KWin 提供的新设置机制。

Waydroid 对 Linux 内核的要求

Waydroid 不是一个完全独立于内核的普通应用。

Linux 内核必须提供 Android Binder 支持,同时还需要 memfd 或旧式 ashmem 支持。Waydroid 官方文档建议通过内核配置检查这些功能:

grep -i -e android -e memfd -e ashmem \
    "/boot/config-$(uname -r)"

部分发行版也可以检查:

zgrep -i -e android -e memfd -e ashmem /proc/config.gz

如果内核完全没有 Binder 支持,单纯安装 Waydroid 软件包并不能解决问题,需要更换或重新配置内核。

现代主流发行版的默认内核通常已经具备相关基础设施,但不能仅凭发行版名称判断。自定义内核、长期支持旧内核或极简发行版仍然需要实际检查。

显卡兼容性

Waydroid 的图形兼容性与宿主机显卡和 Mesa 驱动关系密切。

ArchWiki 当前认为 Waydroid 在 Intel 核芯显卡环境中通常最省事。AMD 开源显卡驱动也已经得到支持。NVIDIA,尤其是只使用专有驱动并且没有可切换核芯显卡的系统,仍然更容易遇到图形问题。

无法使用 GPU 加速时,可以强制使用软件渲染。官方文档提供的办法是在 /var/lib/waydroid/waydroid.cfg 中加入:

[properties]
ro.hardware.gralloc=default
ro.hardware.egl=swiftshader

然后应用配置:

sudo waydroid upgrade -o

软件渲染可以解决部分不支持显卡或虚拟机环境中的显示问题,但性能会明显下降,因此更适合排错或运行轻量应用,不适合作为高性能长期方案。

双显卡电脑也可能出现窗口花屏、闪烁或使用错误 GPU 的问题。Waydroid 官方已将双 GPU 图形异常列入已知问题。

在 Arch Linux 上安装 Waydroid

截至 2026 年 7 月,Waydroid 1.6.3 已进入 Arch Linux 官方 Extra 仓库。

确认当前处于 Wayland 会话:

echo "$XDG_SESSION_TYPE"

正常应输出:

wayland

安装 Waydroid:

sudo pacman -S --needed waydroid

初始化 Android 镜像:

sudo waydroid init

启动并启用容器服务:

sudo systemctl enable --now waydroid-container.service

启动 Android 完整界面:

waydroid show-full-ui

也可以手动分开启动容器和用户会话:

sudo waydroid container start
waydroid session start
waydroid show-full-ui

其中,容器操作需要管理员权限,用户会话和图形界面不应使用 sudo 启动。官方文档同样将容器启动、会话启动和图形界面启动分成三个步骤。

Vanilla 与 GAPPS 镜像

Waydroid 通常提供两类镜像。

Vanilla

Vanilla 镜像不包含 Google Play 商店和 Google Play Services。

它更适合:

  • 只安装开源 Android 应用;
  • 使用 F-Droid;
  • 手动安装 APK;
  • 尽量减少 Google 服务;
  • 不需要依赖 Google Play Services 的应用。

GAPPS

GAPPS 镜像包含 Google Play 商店和 Google Play Services。

它更适合:

  • 需要从 Play 商店安装应用;
  • 应用依赖 Google 登录;
  • 应用依赖 Firebase、Google 地图或其他 Google 服务。

Waydroid 官方说明,GAPPS 镜像包含专有的 Google Play Services 和 Google Play Store,面向个人使用。Vanilla 与 GAPPS 在软件许可和可再分发范围方面也存在明显差异。

GAPPS 镜像第一次启动时,设备可能显示为“未经 Play Protect 认证”。官方处理方式是读取 Android ID,并在 Google 的未认证设备登记页面注册。完成后需要等待 Google 服务同步,再重启 Waydroid。

即使完成自助认证,也不代表所有依赖硬件证明或完整 Play Integrity 的应用都会通过检查。

安装和启动 APK

安装本地 APK:

waydroid app install example.apk

列出已经安装的应用:

waydroid app list

通过包名启动应用:

waydroid app launch com.example.application

删除应用:

waydroid app remove com.example.application

安装成功后,Android 应用通常会自动生成桌面启动项,并出现在 KDE、GNOME 等桌面环境的应用程序菜单中。

这也是 Waydroid 与普通安卓虚拟机相比最有吸引力的部分:使用者不必每次先打开一整台“虚拟手机”,再从手机桌面里寻找应用。

x86_64 与 ARM 应用兼容性

Waydroid 不负责自动模拟不同的 CPU 架构。

如果 Linux 电脑使用 x86_64 CPU,最理想的情况是 Android 应用本身同时提供 x86_64 或通用版本。但现实中,大量 Android APK 只包含 ARM 或 ARM64 本地库。

官方文档明确提醒,从网络下载的 APK 经常只支持 ARM,因此不能直接在 x86_64 Waydroid 中运行。

纯 Java 或 Kotlin 应用通常问题较少,因为主要代码运行在 Android Runtime 中。

包含以下内容的应用更容易受 CPU 架构影响:

  • 原生 C/C++ 库;
  • 游戏引擎;
  • 视频编解码组件;
  • 加密或安全库;
  • 特定厂商提供的闭源 SDK。

社区中存在 libhoudini、libndk 等 ARM 转译方案,但它们不是 Waydroid 最基础、最干净的默认组成部分,还可能涉及兼容性和许可问题。加入这些组件前,应先确认应用是否真的只有 ARM 版本。

与 Linux 共享文件

Waydroid 的 Android 用户数据通常位于:

~/.local/share/waydroid/

可以通过 bind mount 将 Linux 目录映射进 Android 内部存储。例如:

sudo mount --bind \
    "$HOME/Downloads" \
    "$HOME/.local/share/waydroid/data/media/0/Download"

也可以映射文档、音乐、图片和视频目录。官方文档给出的对应关系包括:

Linux Documents  → Android Documents
Linux Downloads  → Android Download
Linux Music      → Android Music
Linux Pictures   → Android Pictures
Linux Videos     → Android Movies

这样可以避免通过聊天工具、网盘或 ADB 在 Linux 与 Android 之间反复传输文件。

需要注意,直接把整个家目录映射给 Android 应用并不是好主意。更稳妥的办法是只共享确实需要访问的少数目录。

输入法和物理键盘

Waydroid 可以接收 Linux 桌面的物理键盘输入,但 Android 默认仍可能在点击输入框时弹出屏幕键盘。

只使用物理键盘时,可以在 Android 中关闭:

Settings
→ System
→ Languages & input
→ Physical keyboard
→ Use on-screen keyboard

Waydroid 官方文档也推荐通过这一设置关闭重复出现的 Android 虚拟键盘。

中文、日文等输入法的体验还取决于桌面环境、Wayland 输入法协议、Fcitx 5、应用窗口模式和 Android 应用本身。并非所有应用都能像原生 Linux 应用一样处理组合文本、候选框和快捷键。

因此,准备长期使用前,最好实际测试最常用的几个输入场景。

网络是最容易出现问题的环节之一

Waydroid 会创建自己的虚拟网络接口,通常名为:

waydroid0

Android 容器通过虚拟网桥、DHCP、DNS 转发和宿主机的网络转发能力接入互联网。

一旦防火墙、iptables/nftables 转发、dnsmasq、容器接口或 Android DHCP 客户端出现问题,可能出现以下现象:

  • Waydroid 界面可以启动;
  • Android 系统显示正在运行;
  • 宿主机能够看到 waydroid0
  • Android 内部却没有获得 IPv4 地址;
  • 没有默认路由;
  • DNS 和互联网访问全部失败。

首先可以检查:

ip addr show

查看服务状态:

sudo systemctl status waydroid-container.service

查看 Waydroid 日志:

waydroid log

导出 Android logcat:

sudo waydroid logcat > ~/waydroid-logcat.txt

这些也是 Waydroid 官方建议在报告问题前收集的基础信息。

官方网络排错文档还特别列出了防火墙转发问题。例如,使用 firewalld 时,可以把 waydroid0 加入 trusted zone;使用 UFW 时,需要允许 DNS、DHCP 和转发;如果 iptables 的 FORWARD 默认策略是 DROP,也可能阻断容器联网。

不过,不能看到“没有网络”就直接修改防火墙。应先判断数据包停在哪一层:

Android DHCP 客户端
        ↓
Android guest eth0
        ↓
宿主机 veth
        ↓
waydroid0 网桥
        ↓
宿主机转发和 NAT
        ↓
外部网络

如果 DHCP 请求根本没有从 Android guest 网卡发出,继续修改宿主机 NAT 和防火墙通常没有意义。

常见故障的检查顺序

Waydroid 无法正常工作时,可以按照下面的顺序排查。

1. 确认会话类型

echo "$XDG_SESSION_TYPE"

应优先使用 Wayland。

2. 确认容器状态

sudo systemctl status waydroid-container.service

3. 查看 Waydroid 自身状态

waydroid status

4. 查看日志

waydroid log
sudo waydroid logcat

5. 检查内核支持

grep -i -e android -e memfd -e ashmem \
    "/boot/config-$(uname -r)"

6. 检查虚拟网络

ip addr show waydroid0
ip route

7. 检查镜像与软件版本

waydroid --version
sudo waydroid upgrade

Waydroid 官方仍将项目描述为快速开发中的软件,并建议遇到问题时先更新软件包和系统镜像。

不建议一遇到问题就删除全部数据并重新初始化。重新初始化会破坏现有 Android 环境,应该作为确认配置不可修复后的最后手段。

Android 13 升级后的文件系统要求

Waydroid 当前镜像已经转向 Android 13。官方已知问题中提到,从 Android 13 开始,用户家目录所在文件系统需要支持 ACL。

如果家目录位于 Btrfs 上,并且通过 systemd-homed 或特殊挂载参数禁用了 ACL,容器可能在升级后无法启动。

因此,排查“旧镜像能启动,新镜像不能启动”时,除了检查 Waydroid 本身,也应检查:

findmnt -no FSTYPE,OPTIONS "$HOME"

重点确认挂载选项中没有:

noacl

备份不能被忽略

Waydroid 的 Android 环境不是一次性窗口。安装的应用、登录状态、内部存储和应用数据都会保存在用户目录和 Waydroid 数据目录中。

重新初始化、删除数据目录或更换镜像前,应先备份:

~/.local/share/waydroid/

以及可能存在的系统级数据:

/var/lib/waydroid/

直接复制目录并不一定能保证所有应用数据都能在不同 Android 大版本、不同镜像或不同 Waydroid 版本之间完整恢复,但至少可以保留原始数据,为后续恢复和审计提供基础。

重要账号仍应依赖应用自身的云同步、导出功能或服务端数据,不应把整个账号状态只寄托在 Waydroid 数据目录上。

哪些应用可能无法正常运行

Waydroid 能运行很多普通 Android 应用,但不应把它理解成一台在所有方面都与认证手机相同的设备。

以下类别更容易出现兼容问题:

  • 只提供 ARM 原生库的应用;
  • 要求 Play Integrity 或硬件设备证明的应用;
  • 银行、支付、证券和数字身份应用;
  • 依赖 SIM 卡、基带或真实电话号码的应用;
  • 强依赖陀螺仪、GPS、NFC、蓝牙外设或摄像头的应用;
  • 使用 Widevine 等 DRM 的流媒体应用;
  • 带有严格反模拟器、反 Root 或设备完整性检查的游戏;
  • 依赖特定手机厂商框架的程序。

GAPPS 自助认证主要解决 Play 商店中的“设备未认证”提示,不能把普通 Linux 电脑变成具有硬件可信执行环境和厂商认证链的安卓手机。

Waydroid 是否安全

Waydroid 使用 Linux namespaces 和容器机制隔离 Android 环境,但它仍与宿主机共用内核,而且设计目标包括让 Android 直接访问必要硬件。

因此,Waydroid 不应被视为专门运行恶意 APK 的高安全沙箱。

使用时应遵循几个基本原则:

  • 不安装来源不明的 APK;
  • 不随意给 Android 应用共享整个 Linux 家目录;
  • 不在未经验证的环境中登录最重要的金融账号;
  • 不为了兼容某个应用盲目安装来源不明的 Root、转译或完整性绕过模块;
  • 修改系统级 Waydroid 配置前先保留原文件;
  • 删除或重置数据前先备份。

需要强隔离时,完整虚拟机仍然比共享宿主内核的容器更适合。

Waydroid 适合哪些人

Waydroid 特别适合以下场景:

  • 已经使用 KDE Plasma 或 GNOME Wayland;
  • 希望在 Linux 上偶尔运行 Android 应用;
  • 不想长期保留实体备用手机;
  • 希望 Android 应用以独立窗口进入桌面;
  • 需要比完整虚拟机更低的系统开销;
  • 使用 Intel 或 AMD 开源图形驱动;
  • 能够接受少数应用不兼容;
  • 愿意进行基本的 Linux 服务和网络排错。

以下场景则不一定适合:

  • 必须使用银行或支付应用;
  • 依赖严格 DRM 和设备认证;
  • 仍然必须长期停留在纯 X11;
  • 使用兼容性较差的专有显卡环境;
  • 需要精确模拟真实手机硬件;
  • 需要同时测试多个 Android 版本;
  • 无法接受偶尔处理容器、网络和镜像问题。

Waydroid 也是迁移 Wayland 的一个理由

Wayland 与 X11 的选择长期以来主要取决于桌面流畅度、缩放、多显示器、输入法、远程控制和传统软件兼容性。

Waydroid 增加了一个新的现实因素:它从设计上就是 Wayland 应用。

对于已经具备成熟 Wayland 支持的 KDE Plasma 系统,Waydroid 可以成为切换 Wayland 的直接收益之一。高分辨率缩放、窗口动画和 Android 应用整合都可以放在同一个现代显示协议下完成。

但迁移前仍应逐项确认:

中文或日文输入法
绘图板旋转与局部映射
截图和录屏
远程桌面
窗口规则
全局快捷键
游戏和 XWayland 应用

显示协议迁移不是简单地把登录界面中的 X11 改成 Wayland。两个会话的窗口坐标、缩放逻辑、设备配置和权限模型并不完全相同,原有 X11 脚本也不一定能继续使用。

总结

Waydroid 是目前 Linux 桌面上运行 Android 应用最值得优先尝试的方案之一。

它最大的优势不是“能够启动 Android”,而是把 Android 从一台独立的虚拟手机变成 Linux 桌面的一部分:

  • Android 系统运行在 Linux 容器中;
  • 不需要再启动一套完整客体内核;
  • 应用可以进入桌面菜单;
  • 支持完整 Android 界面和独立窗口;
  • 可以共享宿主机目录;
  • 性能和资源占用通常优于完整虚拟机。

它的限制也同样明确:

  • 以 Wayland 为主要运行环境;
  • 依赖 Binder、memfd或ashmem等内核能力;
  • 显卡驱动会直接影响体验;
  • x86_64 无法天然运行所有 ARM-only APK;
  • 设备认证、DRM 和硬件证明无法完全模拟;
  • 网络、输入法和外围设备仍可能需要排错;
  • 容器不能代替高隔离虚拟机。

因此,Waydroid 不是“让所有 Android 应用百分之百运行”的万能模拟器。

更准确的定位是:

Waydroid 是把一套完整 Android 用户空间,以接近 Linux 原生应用的方式整合进 Wayland 桌面的容器平台。

对于已经使用现代 Linux 桌面、只需要运行普通 Android 应用,并且能够接受少数兼容性限制的用户,它往往是比传统模拟器更轻、更自然,也更符合 Linux 架构的一种选择。

Leave a Reply

Your email address will not be published. Required fields are marked *