2024年 Microsoft宣佈,將於2025年中止支援WSA子系統,正式宣告系統內建的Android模擬器流產。
我想尋找一些替代方案,因為WSA系統相對其他模擬器還滿乾淨的,沒有太多商業廣告置入,所以這篇文章我要試試在Windows跑「Waydroid」。
Waydroid基於LXC容器技術實現,在概念上很像Windows的WSA Android子系統,目的是要讓Linux電腦能夠無縫執行Android APP。
Microsoft有給WSL實現 WSLg的圖形介面,背後使用的是Wayland合成器,所以理論上可以跑Waydroid。
WSL本質上是虛擬機,因此WSL跑Waydroid跟在Virtualbox裡面的Ubuntu跑Waydroid其實沒什麼區別,但是WSL啟動速度比較快,且有機會吃到GPU加速。
但,我測試WSLg無法啟動LXC容器,所以只好將其停用了,或許未來可以藉WSLg搞正式的3D加速。因此Waydroid目前是半殘的狀態,沒有GPU加速,virglrenderer亦幫不上忙。
環境#
- Windows 11 23H2
- 顯示卡Nvidia GTX1050Ti
- WSL 2.3.13
- Ubuntu 22.04
- 使用自訂Linux核心
1. 更換特製WSL核心#
首先, 安裝WSL,目前版本是WSL 2 2.0.14。
接著,Waydroid需要特定的Linux核心模組才能運作。
Waydroid開發者有提供預先編譯好的核心可以直接用,但不知道為什麼他們只把編譯好的核心放在Telegram頻道?
如果怕有問題的話也可以參考 Arch Linux Wiki了解Waydroid的依賴項目,並 自行編譯WSL核心。Waydroid依賴的核心模組主要是binderfs,這個得在kconfig選單開啟。
我們還是使用現成的吧,加 Waydroid的Telegram頻道,於聊天欄輸入指令
/get wsl
取得核心檔案kernel
。把kernle檔案放到Windows的
C:\Users\使用者名稱\customwslkernel
資料夾之後切換到Windows的C槽使用者家目錄
C:\Users\使用者名稱
,新增設定檔.wslconfig
編輯該檔案,輸入以下內容,使用自訂核心,並停用WSLg
[wsl2]
kernel=C:\\Users\\使用者名稱\\wslcustomkernel\\kernel
guiApplications=false
- 重新啟動WSL
wsl --shutdown
wsl -d Ubuntu
2. 設定X伺服器和Weston#
假如未來WSLg下的Waydroid正常運作,那麼這段就可以跳過。
- 登入WSL,確認WSL的圖形驅動有載入。WSL應該會偵測到你實體機的GPU,例如Intel。
sudo apt install mesa-utils
glxinfo | grep OpenGL
設定 VcXsrv和PulseAudio
安裝Wayland合成器Weston
sudo apt install weston
- 啟動Weston工作階段,VcXsrv應該會看到Weston視窗
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
export LIBGL_ALWAYS_INDIRECT=1
weston &
3. 安裝Waydroid#
- 回到終端機,加入官方套件庫,安裝Waydroid套件
sudo apt install curl ca-certificates lzip python3 python3-pip
curl https://repo.waydro.id | sudo bash
sudo apt install waydroid
sudo waydroid init -s GAPPS -f
sudo systemctl start waydroid-container
- 啟動Waydroid前需要手動啟動dbus服務
sudo systemctl start dbus
export XDG_RUNTIME_DIR=/run/user/$(id -u)
sudo mkdir $XDG_RUNTIME_USER
sudo chmod 700 $XDG_RUNTIME_DIR
sudo chown $(id -un):$(id -gn) $XDG_RUNTIME_DIR
export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus
dbus-daemon --session --address=$DBUS_SESSION_BUS_ADDRESS --nofork --nopidfile --syslog-only &
- 在Weston的視窗開啟終端機,啟動Waydroid主界面,視窗應該會跑到Weston那邊。
export XDG_SESSION_TYPE=wayland
waydroid session start
waydroid show-full-ui
- 參照 Ubuntu設定Waydroid的過程,把linhoudini和Google Play認證完成。