Waydroid教學:在Arch Linux電腦跑Android APP

Waydroid是Anbox配合Halium技術開發的LXC Android容器,可在GNU/Linux系統執行Android APP。

  • 作業系統: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核心

根據開發者說法,由於Nvidia閉源驅動不照圖形驅動程式標準走的緣故,目前Waydroid只支援Intel和AMD的顯示卡,Nvidia顯示卡會沒畫面,若您為Nvidia顯示卡建議改用其他Android模擬器方案

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
sudo waydroid init -s GAPPS -f
  1. 啟動Waydroid容器服務
1
2
3
sudo systemctl start waydroid-container
# 開機自動啟動
sudo systemctl enable waydroid-container
  1. 點選應用程式列表的「Waydroid」圖示開啟主畫面,或者使用指令:waydroid show-full-ui

  2. 若Waydroid沒有網路,允許其通過防火牆:

1
2
3
4
5
6
sudo systemctl enable --now ufw
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帳號。

  1. 此時要取得casualsnek製作的指令稿,用於取得Waydroid的裝置ID。該指令會印出一長串數字。
1
2
3
4
5
6
7
8
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。

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
waydroid show-full-ui

啟動/停止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. 一些小優化

6.1. 強制旋轉螢幕

安裝Rotation Control這類APP,即可強制調整Waydroid螢幕方向。

6.2. 開啟模擬Wifi

安裝Package Manager,用於查看APP的套件名稱。

部份APP會要求開啟Wifi才能上網,那麼就如它所願,開啟fake wifi:

1
2
3
4
sudo waydroid prop set persist.waydroid.fake_wifi "套件名稱"
# 例如
sudo waydroid prop set persist.waydroid.fake_wifi "com.aniplex.fategrandorder"
# 接著執行sudo systemctl restart waydroid-container

6.3. 模擬觸控功能

安裝Package Manager,用於查看APP的套件名稱。

有些APP認不到滑鼠點擊,需要啟用模擬觸控(fake touch):

1
2
3
4
sudo waydroid prop set persist.waydroid.fake_touch "套件名稱"
# 例如
sudo waydroid prop set persist.waydroid.fake_touch "com.aniplex.fategrandorder"
# 接著執行sudo systemctl restart waydroid-container

6.4. Linux與Waydroid檔案傳輸

使用mount指令新增連結:

1
sudo mount --bind ~/Downloads ~/.local/share/waydroid/data/media/0/Download

您也可以用ADB無線指令傳輸檔案。

7. 有關Waydroid的疑難雜症

解決Nivida顯示卡的問題

由於Nvidia圖形驅動程式不遵守公開標準,目前Waydroid在Nvidia顯示卡無法啟動。

硬要的話,編輯/var/lib/waydroid/waydroid_base.prop,加入以下內容改用效能極差的軟體渲染。

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

如何在X11環境啟動Waydroid

  1. 啟動Weston
1
weston
  1. 在Weston視窗開啟終端機,啟動Waydroid主畫面
1
2
export XDG_SESSION_TYPE=wayland
waydroid show-full-ui

不想要Waydroid APP圖示出現在桌面

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

寫個指令稿於Waydroid關閉後刪除之。

Waydroid APP無法寫入內部儲存空間

如果出現此問題,請使用casualsnek的指令稿修正目錄權限:

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

參考資料


感謝您的閱讀。歡迎分享Ivon的部落格(ivonblog.com)的文章,引用或轉載請註明文章網址,並遵守創用CC-姓名標示-非商業性-禁止改作 4.0 國際授權條款。如需商業使用請來信告之。

written by human, not by AI

如果本網站文章對您有幫助,歡迎請我喝杯珍珠奶茶。

留言板

點選按鈕,選擇您覺得方便的留言系統。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要登入Github帳號才能留言。支援markdown語法,方便您張貼程式碼,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。