注意:本文內容已經過時,下面內容僅供參考。
到這裡看Waydroid的新版本用法:Arch Linux安裝Waydroid
Waydroid以前Android 10的映像檔沒有穩定的ARM轉譯器可用。為此自行安裝Android 11測試版映像檔+libhoudini,並測試能否執行原神(ARM64-v8a架構)這類大型遊戲。
系統為Gentoo Linux,核心版本kernel-bin-6.0.6。需要使用支援Wayland的桌面環境(或者在X11下用Weston跑),另外Waydroid不支援Nvidia顯示卡,所以我用Intel內顯UHD 630測試。
如果之前已經有安裝過Android 10的舊版Waydroid,建議先將其完全移除再來嘗試。
另外,你可以加入Waydroid的Telegram群組與開發者聯絡。
-
到Sourceforge下載Waydroid最新版映像檔,例如我下載的是lineage-18.1-20221030-MAINLINE-waydroid_x86_64-vendor.zip
和lineage-18.1-20221030-GAPPS-waydroid_x86_64-system.zip
-
解壓縮,將system.img和vendor.img放到/waydroid-extra/images
:
1
2
|
sudo mkdir -p /usr/share/waydroid-extra/images
sudo mv system.img vendor.img /usr/share/waydroid-extra/images
|
- 準備casualsnek的Waydroid指令稿:
1
2
3
4
5
6
7
|
# 安裝前置依賴套驗:lzip和sqlite
sudo emerge --ask lzip sqlite
cd ~
git clone https://github.com/casualsnek/waydroid_script.git
cd waydroid_script
sudo python3 -m pip --user install -r requirements.txt
|
- Gentoo的Waydroid套件要加入
guru
和xarblu-overlay
這二個Overlay才能滿足編譯條件。加入後安裝Waydroid。
1
2
|
# 安裝Waydroid (不含系統映像檔)
sudo USE="iptables systemd clipboard nftables" emerge --ask app-emulation/waydroid
|
- 編輯gbinder設定
1
2
|
sudo mkdir /etc/gbinder.d
sudo vim /etc/gbinder.d/anbox.conf
|
- 參考此文,填入API版本30:
1
2
3
4
5
6
7
8
9
10
11
12
|
[Protocol]
/dev/anbox-binder = aidl3
/dev/anbox-vndbinder = aidl3
/dev/anbox-hwbinder = hidl
[ServiceManager]
/dev/anbox-binder = aidl3
/dev/anbox-vndbinder = aidl3
/dev/anbox-hwbinder = hidl
[General]
ApiLevel = 30
|
- 初始化Waydroid
1
|
sudo waydroid init -f -i /usr/share/waydroid-extra/images
|
- 啟動Waydroid服務
1
|
sudo systemctl start waydroid-container
|
*若出現Failed to parse config file "/var/lib/waydroid/lxc/waydroid/config" at line "lxc.apparmor.profile = unconfined"
錯誤,編輯/var/lib/waydroid/lxc/waydroid/config
將lxc.apparmor.profile = unconfined
註解掉,再重新啟動Waydroid服務。參考來源
- 進入Waydroid桌面
- 執行casualsnek的指令稿取得裝置ID,進行Google Play認證,等30分鐘才能登入Google Play。
1
2
|
cd ~/waydroid_script
sudo python3 waydroid_extras.py -i
|
此處要將casualsnek Waydroid指令稿提供的libhoudni換成從WSA抽取的libhoudni,版本較新。
- 製作自訂libhoudini
1
2
3
|
git clone https://github.com/natsumerinchan/libhoudini-package.git
cd libhoudini-package
zip -r libhoudini.zip system
|
- 取得該壓縮檔的MD5數值
- 將這個zip移動到Waydroid指令稿的下載目錄
1
|
sudo mv libhoudini.zip ~/.cache/waydroid_script/downloads/
|
- 編輯casualsnek的Waydroid指令稿
1
2
|
cd ~/waydroid_script
vim waydroid_extras.py
|
- 找到函數
install_houdin()
,將下載檔案的MD5改成上面取得的MD5數值
1
2
3
4
5
6
7
|
def install_houdini():
sys_image_mount = "/tmp/waydroidimage"
houdini_zip_url = "https://raw.githubusercontent.com/casualsnek/miscpackages/main/libhoudini_a11.zip"
dl_file_name = os.path.join(download_loc, "libhoudini.zip")
extract_to = "/tmp/houdiniunpack"
act_md5 = "填入上面取得的MD5"
loc_md5 = ""
|
- 將Waydroid服務停止
1
|
sudo systemctl stop waydroid-container
|
- 安裝libhoudini,這樣指令稿會直接使用剛剛製作的libhoudini.zip。
1
|
sudo python3 waydroid_extras.py -l
|
- 重新啟動Waydroid並進入桌面
1
2
|
sudo systemctl start waydroid-container
waydroid show-full-ui
|
有了libhoudini轉譯器,大部分ARM64遊戲應該都能執行了。不過Google Play仍只會顯示x86架構的APP,因此要自行去ApkPure找APK來裝。
至於《原神》還需要一點特殊處理,首先Google Play版的APK會在載入時出現31-4302
錯誤,得改從TapTap下載APK才可以(搜尋"Genshin Impact")。第二,原神需要用特殊手段啟動。
-
安裝原神後開啟遊戲,登入帳號,下載遊戲資源。下載中如果當掉,則將原神APP強制停止、清除快取,接著重開遊戲繼續下載。
-
下載後在讀取遊戲資料時會閃退,同樣將原神APP強制停止和清除快取。
-
開啟Waydroid的系統設定,點選關於手機,查看Waydroid的IP。
-
開啟終端機,將 ilhan-athn7的指令稿透過ADB傳送到Waydroid內部。
1
2
3
4
|
cd ~
git clone https://github.com/ilhan-athn7/WSA_houdini_A12.1.git
adb connect -s <Waydroid的IP>:5555
adb -s <Waydroid的IP>:5555 push ~/WSA_houdini_A12.1/GI_affinity_workaround/* /sdcard
|
- 開啟Waydroid shell
1
2
|
sudo waydroid shell
cd /sdcard
|
- 執行第一個指令稿。此指令稿不會對遊戲作任何修改,僅是啟動原神,並限制只使用二個CPU核心,這樣才能解決原神讀取資料閃退的問題。
- 在讀取完遊戲資料(看到大門)後,執行第二個指令稿解除核心限制
-
這樣應該就可以玩了,Intel UHD 630內顯跑中等畫質的FPS還行。因為是Android版,RAM佔用不多,但畫質再調高可能就會閃退。
-
Scrcpy目前無法配合Waydroid執行,鍵盤映射暫時不可用。不過Waydroid在最新版本加入了將滑鼠點擊轉換成觸控事件的功能,還有假裝Wifi連線:
1
2
3
|
waydroid prop set persist.waydroid.fake_touch "*"
waydroid prop set persist.waydroid.fake_wifi "*"
|
希望Android 11和這些功能可以盡早進入穩定階段囉。