「Waydroid」是一個讓您在Linux系統跑Android APP的軟體,可達到類似Windows的「Android模擬器」的功能。
Waydroid支援GPU硬體加速,所以可以玩Android遊戲,還能登入Google Play商店、刷入Magisk、裝ARM→x86轉譯的libhoudini等等。
Waydroid內建的系統基於LineageOS建置,背後技術源自Canonical的「Anbox」LXC容器技術,由Waydroid開發團隊將其功能變得更加完善。就用法而言,Waydroid容器比較像Windows的Android子系統(WSA),而非單純的虛擬機。
在眾多的 Linux系統Android模擬器解決方案中,Waydroid算是能跟桌面系統整合比較好的。
本文讓Ivon說明如何在Ubuntu安裝Waydroid。
1. 前置條件#
Waydroid支援Ubuntu 20.04以上系統,安裝指令稿應會自動偵測系統版本。
確保您不是用Nvidia顯示卡。根據開發者說法,由於Nvidia閉源驅動不照圖形驅動程式標準走的緣故,目前Waydroid只支援Intel和AMD的顯示卡,Nvidia顯示卡會黑畫面,此問題目前尚未解決, 進度可到Github查詢。若您為Nvidia顯示卡建議改用 其他Android模擬器方案。
接著,確保現在是使用Wayland工作階段,輸入以下指令查看:
echo $XDG_SESSION_TYPE
- 若顯示的不是
wayland
代表您還在用X11,請登出Ubuntu,在輸入密碼的時候點選右下角齒輪,選擇Ubuntu
或者不帶Xorg
的選項登入。
註解:你也可以安裝
weston套件,並打weston
指令啟動巢狀Wayland工作階段,再開啟Weston的終端機,達成在X11環境跑Waydroid的作法。
- 最後是電腦架構部份,Waydroid支援x86與ARM架構的電腦,安裝套件時程式會自己判斷。理想上 ARM架構的Ubuntu電腦更好,這樣就不需要裝libhoudini轉譯器了。
2. 安裝Waydroid#
此處的指令只適用Ubuntu與Debian,其他Linux發行版請參考 官方文件。
- 安裝以下套件,包含Waydroid以及後續指令稿會用到的套件。
sudo apt install curl ca-certificates lzip python3 python3-pip
- 加入Waydroid官方儲存庫,安裝Waydroid
curl https://repo.waydro.id | sudo bash
sudo apt install waydroid
- 初始化Waydroid,下載內建GAPPS的映像檔
sudo waydroid init -s GAPPS -f
- 啟動Waydroid容器服務
sudo systemctl start waydroid-container
# 開機自動啟動
sudo systemctl enable waydroid-container
在應用程式列表點選「Waydroid」的圖示,啟動Waydroid。
Waydroid預設界面是英文的,請到Android系統設定修改語言,調整時區。
如果Waydroid無法連上網路,請嘗試開放UFW防火牆,再重新啟動Waydroid:
sudo ufw 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. 向Google註冊Waydroid裝置#
第三方ROM不向Google註冊裝置的話,是無法存取Google Play商店的。
- 進入Android的shell
sudo waydroid shell
- 執行以下指令,會迸出一長串代碼,即裝置ID
ANDROID_RUNTIME_ROOT=/apex/com.android.runtime ANDROID_DATA=/data ANDROID_TZDATA_ROOT=/apex/com.android.tzdata ANDROID_I18N_ROOT=/apex/com.android.i18n sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"
到 Google裝置註冊,填入該代碼
等30分鐘後,重新啟動Waydroid,就可以使用Play商店了。
sudo systemctl restart waydroid-container
4. 安裝libhoudini轉譯器#
目前ARM → x86的轉譯器有libhoudini和libndk,前者比後者穩定些。
libhoudini是Intel研發的專有軟體,用於將ARM指令翻譯成x86的指令,性能會有些微損失。
鑑於大多數電腦都是x86架構,所以得裝libhoudini。不裝這個的話,將有一半以上的遊戲無法執行。
- 取得 casualsnek製作的指令稿,安裝libhoudini:
sudo apt install lzip
cd ~
git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script
python3 -m venv venv
venv/bin/pip install -r requirements.txt
cd ~/waydroid_script
sudo venv/bin/python3 main.py install libhoudini
- 重啟Waydroid
sudo systemctl restart waydroid-container
- Google Play可能還是不會顯示x86架構以外的應用程式,為此您需要到ApkMirror找ARM架構的APK來裝,看能否正常開啟,例如 Subway Surfers
5. 一些小優化#
螢幕旋轉#
安裝 Rotation Control這類APP,即可強制調整Waydroid螢幕方向。
開啟模擬Wifi#
安裝 Package Manager,用於查看APP的套件名稱。
部份APP會要求開啟Wifi才能上網,那麼就如它所願,開啟fake wifi:
waydroid prop set persist.waydroid.fake_wifi "套件名稱"
例如給Fate/Go遊戲開啟模擬Wifi:
waydroid prop set persist.waydroid.fake_wifi "com.aniplex.fategrandorder"
sudo systemctl restart waydroid-container
模擬觸控功能#
安裝 Package Manager,用於查看APP的套件名稱。
有些APP認不到滑鼠點擊,需要啟用模擬觸控(fake touch):
waydroid prop set persist.waydroid.fake_touch "套件名稱"
# 例如
waydroid prop set persist.waydroid.fake_touch "com.aniplex.fategrandorder"
# 接著執行sudo systemctl restart waydroid-container
6. Waydroid進階使用技巧#
Waydroid執行時的Android系統資料放在~/.local/share/waydroid/data/
,系統映像檔位於/var/lib/waydroid
,APP圖示位於~/.local/share/applications/
系統操作指令#
啟動/停止Waydroid容器服務
sudo systemctl start waydroid-container
sudo systemctl stop waydroid-container
用指令開啟Waydroid主畫面
waydroid show-full-ui
查看系統錯誤訊息
waydroid log
sudo waydroid logcat
用指令安裝APK#
Waydroid用此指令安裝APK:
waydroid app install <APK檔案路徑>.apk
進入ADB Shell#
進入Android shell,內建Root權限
sudo waydroid shell
開啟懸浮模式#
以下指令讓Waydroid開啟多視窗模式,變成好像Linux的原生應用程式一般。啟動後按F11改回來。
waydroid prop set persist.waydroid.multi_windows true
sudo systemctl restart waydroid-container
APP無法儲存檔案#
用casualsnek的指令稿,修正Android 11版Waydroid的APP無法寫入儲存空間的問題:
cd ~/waydroid_script
sudo python3 main.py hack nodataperm
sudo systemctl restart waydroid-container
Linux與Waydroid檔案傳輸#
使用mount指令新增連結:
sudo mount --bind ~/Downloads ~/.local/share/waydroid/data/media/0/Download
您也可以用ADB無線指令傳輸檔案。
多開APP#
Waydroid設計上沒辦法多開作業系統。但是你可以透過 Shelter在一個系統雙開APP。
延伸閱讀#
回報bug請到 Waydroid的Github儲存庫