Waydroid教学:在Arch Linux电脑跑Android APP

First Post:

Last Update:

Word Count:
1.3k

Read Time:
5 min

转载:https://ivonblog.com/posts/archlinux-waydroid/#0-waydroid%E7%89%B9%E8%89%B2

Waydroid教学:在Arch Linux电脑跑Android APP

Waydroid是Anbox配合Halium技术开发的LXC Android容器,可在GNU/Linux系统执行Android APP。img

  • 作业系统:Arch Linux
  • Linux核心版本:6.3.2
  • Waydroid映像档版本:LineageOS 18 (Android 11)
  • CPU: Intel I5-7400
  • GPU: Intel UHD 630

0. Waydroid特色

以下是Waydroid的特色功能:

  • Linux平台自由开源的Android容器解决方案
  • 支援x86与ARM架构的装置
  • 与宿主机共用剪贴簿
  • 直接使用电脑显示卡硬体加速,跑3D游戏、看影片没什么问题。
  • 內建GAPPS,可以使用Google Play
  • 支援给x86装置安装ARM转译器
  • 支援安装Widevine DRM模组
  • 支援Magisk

1. 设定显示卡与Linux核心

1.1. 切换至Wayland

Waydroid必须使用Wayland显示协定,用此指令检查目前的工作阶段是否为Wayland:

1
echo $XDG_SESSION_TYPE 

若显示X11代表不是Wayland。GNOME和KDE可在登入画面切换至Wayland工作阶段。

如果想在X11工作阶段使用Waydroid,请安装Weston,再参考文末作法。

1.2. 安装binder核心模组

Waydroid要求Linux核心支援binder核心模组,但Arch Linux预设的linux核心並无开启此选项,因此需要从AUR安装binder_linux-dkms补齐。

1
yay -S binder_linux-dkms 

安装后载入binder核心模组

1
sudo modprobe binder_linux

设定开机自动载入核心模组

1
2
su 
echo "binder_linux" >> /etc/modules-load.d/binder.conf

2. 安装Waydroid

  1. 从AUR安装Waydroid:
1
2
yay -S python-pyclip xclip wl-clipboard mailcap 
yay -S waydroid
  1. 初始化Waydroid,下载含有GAPPS的Android系统映像档。
1
2
3
4
sudo waydroid init -s GAPPS -f    #要魔法,不然很慢
或者
yay -S waydroid-image-gapps
waydroid init -s GAPPS -f
  1. 启动Waydroid容器服务
1
2
3
sudo systemctl start waydroid-container 
# 开机自动启动
sudo systemctl enable waydroid-container
  1. 由於图形驱动程式的缘故,目前Waydroid只支援Intel和AMD的显示卡,Nvidia显示卡会没画面。请看本文最下面的额外作法。
  2. 点选应用程式列表的「Waydroid」图示开启主画面,或者使用指令:waydroid show-full-uiimg
  3. 若Waydroid没有网路,允许其通过防火墙:
1
2
3
4
5
sudo ufw allow 53 
sudo ufw allow 67
sudo ufw default allow FORWARD
sudo ufw reload
sudo systemctl restart waydroid-container

3. 將Waydroid註册为Google装置

  1. Waydroid第一次开机可能会收到Device is not Play Protect certified的通知,无法登入Google帐號。

img

  1. 此时要取得casualsnek製作的指令稿,用於取得Waydroid的装置ID。该指令会印出一长串数字。
1
2
3
4
5
6
7
sudo pacman -S lzip sqlite python3 python-pip
cd ~
git clone https://github.com/casualsnek/waydroid_script
cd ~/waydroid_script
sudo python3 -m pip install -r requirements.txt
cd ~/waydroid_script
sudo python3 main.py certified
  1. 开启装置註册页面,登入Google帐號,输入装置ID註册,等个半小时应该就能登入Google帐號了。如果还是不行就重新启动Waydroid容器服务:
1
sudo systemctl restart waydroid-container
  1. 现在可以安装APP了,Google Play和F-Droid会自动筛出適合x86架构的APP。img

4. 安装ARM转译器libhoudini

很多APP只为手机的ARM架构打造,但大多数电脑都是x86架构,为此你需要安装ARM转译器才能执行ARM架构的APP。

目前ARM→x86的转译器有libhoudini和libndk,前者比后者稳定些。casualsnek指令稿的libhoudini是从Microsoft Android Subsytem for Windows所抽取出来。

  1. 执行casualsnek的指令稿安装libhoudini:
1
2
cd ~/waydroid_script 
sudo python3 main.py install libhoudini
  1. 重启Waydroid
1
sudo systemctl restart waydroid-container
  1. 试著安装Subway Surfers这款仅提供ARM架构的小游戏。如果开的起来代表ARM转译器正常运作。

5. Waydroid相关指令

若Waydroid无法启动,请善用sudo systemctl status waydroid-containerwaydroid logsudo waydroid logcat查看错误讯息。

用指令开启Waydroid主画面

1
2
3
waydroid show-full-ui
或者
waydroid session start

启动/停止Waydroid容器服务

1
2
sudo systemctl start waydroid-container 
sudo systemctl stop waydroid-container

Waydroid在启动后可以进入Android shell,並且有Root权限

1
sudo waydroid shell 

Waydroid用此指令安装APK

1
waydroid app install <APK档案>.apk 

让Waydroid开启多视窗模式,变成好像Linux的原生应用程式一般。启动后按F11切换

1
2
waydroid prop set persist.waydroid.multi_windows true 
sudo systemctl restart waydroid-container

如果要完全移除Waydroid:

1
2
3
4
waydroid session stop 
sudo systemctl stop waydroid-container
yay -Rsn waydroid
sudo rm -rf /var/lib/waydroid /home/.waydroid ~/waydroid ~/.share/waydroid ~/.local/share/applications/*aydroid* ~/.local/share/waydroid

Waydroid的Android系统资料放在~/.local/share/waydroid/data/,系统映像档位於/var/lib/waydroid,APP图示位於~/.local/share/applications/

6. 有关Waydroid的疑难杂症

6.1. 解决Nivida显示卡的问题

由於Nvidia图形驱动程式不遵守公开標准,目前Waydroid在Nvidia显示卡无法启动。

硬要的话,编辑/var/lib/waydroid/waydroid_base.prop,加入以下內容改用效能极差的软体渲染。

1
2
3
4
ro.hardware.gralloc=default 
ro.hardware.egl=swiftshader
# 接著执行
sudo systemctl restart waydroid-container

6.2. 如何在X11环境启动Waydroid

  1. 启动Weston
1
weston
  1. 在Weston视窗开启终端机,启动Waydroid主画面
1
2
export XDG_SESSION_TYPE=wayland 
waydroid show-full-ui

6.3. 不想要Waydroid APP图示出现在桌面

Waydroid的Android APP图示位於~/.local/share/applications/*aydroid

写个指令稿於Waydroid关闭后刪除之。

6.4. Waydroid APP无法写入內部储存空间

如果出现此问题,请使用casualsnek的指令稿修正目录权限:

复製

1
2
3
cd ~/waydroid_script 
sudo python3 main.py hack nodataperm
sudo systemctl restart waydroid-container

参考资料