« 返回 # 主页 |

Waydroid安装教程:在Linux上无缝运行Android应用

Waydroid安装教程:在Linux上无缝运行Android应用

项目简介

Waydroid是Linux上提供安卓运行环境的一个高效解决方案:https://waydro.id

Waydroid是什么:Waydroid是一个基于LXC(Linux Containers)和QEMU的Android模拟器系统,允许在Linux上无缝运行Android应用和游戏。

技术背景:Waydroid利用Linux命名空间(如用户、PID、UTS、网络、挂载点和IPC)来运行一个完整的Android系统,并通过容器化技术提供高效的运行环境。

项目特点

  • 高效:基于LXC的架构设计,启动速度快,资源占用低。
  • 兼容性:支持最新Android版本,兼容大多数应用。
  • 硬件直通:支持直接访问主机硬件资源。
  • 多窗口模式:尤其适合Wayland桌面环境。

技术特点:

  • LXC与QEMU结合:LXC提供容器隔离,QEMU负责硬件仿真。
  • KVM支持:对于高性能硬件,支持KVM以提升性能。
  • 开源社区驱动:Waydroid是一个开放源代码项目,社区开发者共同参与。

为什么是Waydroid:

性能方面

  • 容器技术优势:Waydroid采用LXC容器技术,相比Anbox的架构,启动速度更快,资源占用更少,尤其是在内存管理方面有显著优势,即使在较低配置的机器上也能流畅运行多个Android应用。
  • 硬件直通优化:Waydroid更好地利用了主机的硬件资源,支持KVM,可进一步提升性能,实现接近原生的速度。而Anbox在硬件加速兼容性方面较差,开启硬件加速的情况下,部分应用可能出现点击无反应等问题。

兼容性方面

  • 支持架构广泛:Waydroid支持ARM、ARM64、x86、x86_64等多种架构,而Anbox对ARM架构的支持有限,只能运行x86的APK,通过修改增加ARM支持也比较麻烦。
  • 应用兼容性更好:Waydroid兼容大多数Android应用,能运行最新版本的Android系统,而Anbox的兼容性一般,部分应用会出现闪退、无法输入中文等问题。

用户体验方面

  • 多窗口模式:Waydroid支持多窗口模式,可以更好地在Linux桌面环境中与其他应用交互,而Anbox在这方面相对欠缺。
  • 无缝集成:Waydroid安装后,Android应用将自动添加到Linux的应用菜单中,与Linux应用一起显示,极大地方便了跨平台使用。

开源与社区

Waydroid是一个完全免费的开源项目,代码托管在GitHub上,用户可以随时查看、贡献代码,或者根据需要修改源代码。虽然Anbox也是开源的,但其开发活跃度和社区支持不如Waydroid。

部署方法

准备工作

  • 操作系统:确保使用基于GNU/Linux的系统,如Ubuntu
  • 硬件要求:支持x86_64架构的CPU(Intel/AMD),支持Intel或AMD的GPU(NVDIA的GPU支持不佳)
  • 依赖安装:安装必要的依赖包,如lxcpython3adb
  • 显示服务:要求使用Wayland环境,至少要求安装Wayland运行环境(没有Wayland环境的似乎可以用weston代替,请自行研究)

安装依赖

以Debian系为例,使用以下命令安装依赖:

sudo apt update 
sudo apt install lxc python3 adb

安装Waydroid

curl https://repo.waydro.id | sudo bash 
sudo apt install waydroid -y

提示

Waydroid已经内置于绝大多数发行版的软件源,其他发行版也可直接使用系统包管理器安装

初始化Waydroid

在命令行里输入 sudo waydroid init 或者在程序列表中选择Waydroid打开初始化向导:

基本信息如上填写:

  • System OTA : https://ota.waydro.id/system
  • Vendor OTA : https://ota.waydro.id/vendor
  • Android Type : 可选VANILLA和GAPPS,前者是没有谷歌框架的版本,后者预装了谷歌框架,按需选择

然后点击下载(Download)按钮便会开始下载系统镜像,默认使用sourceforge,下载速度可能比较缓慢,下载完成后右侧会出现完成(Done)的按钮,点击后就会启动容器,就可以使用安卓系统了。

一些额外配置

以下列举了一些常见问题,来自于官方文档:https://docs.waydro.id/

网络连接

首次启动Waydroid后会发现容器内没有网络连接,因为宿主机的防火墙拦截了网络流量,因此我们需要设置iptables转发规则和防火墙规则:

# 设置iptables
# 检查FORWARD策略是否为DROP
iptables --list-rules | grep FORWARD

# 如果发现有 -P FORWARD DROP 一行,说明iptables拦截了转发流量,用下面行解除拦截
iptables -P FORWARD ACCEPT

# 保存iptables规则
iptables-save > /etc/sysconfig/iptables

# 如果 /etc/sysconfig/iptables 文件不存在,需要安装iptables-services软件包
sudo dnf install iptables-services
# 设置防火墙规则
# ufw用户使用以下命令开放对应端口
sudo ufw allow 53
sudo ufw allow 67
sudo ufw default allow FORWARD

# firewalld用户使用以下命令开放端口
firewall-cmd --zone=trusted --add-interface=waydroid0

窗口管理

#为窗口增加可控制的最大、最小化和关闭按钮
waydroid prop set persist.waydroid.multi_windows true

#为窗口设置初始化大小,设置为两个双引号为默认
waydroid prop set persist.waydroid.width 3440
waydroid prop set persist.waydroid.height 1440
waydroid prop set persist.waydroid.width “”
waydroid prop set persist.waydroid.height “”

#避免在kde上出现多个鼠标指针
waydroid prop set persist.waydroid.cursor_on_subsurface true

安装ARM转译器(libhoudini)

安装waydroid_script

克隆项目:

git clone https://github.com/casualsnek/waydroid_script cd waydroid_script

创建虚拟环境并安装依赖

创建虚拟环境并安装所需依赖:

python3 -m venv 
venv 
./venv/bin/pip install -r requirements.txt

安装libhoudini

使用脚本安装libhoudini:

sudo venv/bin/python3 main.py install libhoudini

重启Waydroid服务

重启Waydroid容器以使更改生效:

sudo systemctl restart waydroid-container

总结

Waydroid为Linux用户提供了在桌面环境中运行Android应用的高效解决方案。无论是开发者还是普通用户,都可以通过Waydroid体验到无缝的Android运行环境。