注意:本文已經過時。現在Waydroid已經更新到Android 11,casualsnek的libhoudini也出新版了,不需要手動裝測試版了。
請看Waydroid的正常裝法: Ubuntu安裝Waydroid
另外,本文僅是概念驗證。如果你真的想在Linux玩原神,請看 這篇裝PC版原神。
介紹如何使用自訂Waydroid映像檔,安裝新版Android嘗試最新技術。
目前原神(v4.1.0)在下載遊戲資料仍會隨機閃退,需要慢慢重試等待下載完成。不過資料一旦下載好後就不需要用指令稿啟動了。
Waydroid以前Android 10的映像檔沒有穩定的ARM轉譯器可用。為此自行安裝Android 11測試版映像檔+libhoudini,並測試能否執行原神(ARM64-v8a架構)這類大型遊戲。
需要使用支援Wayland的桌面環境(或者在X11下用Weston跑),另外Waydroid不支援Nvidia顯示卡,所以我用Intel內顯UHD 630測試。
影片操作示例:
如果之前已經有安裝過Android 10的舊版Waydroid,建議先將其 完全移除再來嘗試。
另外,你可以加入 Waydroid的Telegram群組與開發者聯絡。
1. 設定Waydroid#
到 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
:
sudo mkdir -p /usr/share/waydroid-extra/images
sudo mv system.img vendor.img /usr/share/waydroid-extra/images
- 準備casualsnek的Waydroid指令稿:
# 安裝前置依賴套驗: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
安裝Waydroid套件,不要初始化。
編輯gbinder設定
sudo mkdir /etc/gbinder.d
sudo vim /etc/gbinder.d/anbox.conf
- 參考 此文,填入API版本30:
[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
sudo waydroid init -f -i /usr/share/waydroid-extra/images
- 啟動Waydroid服務
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桌面
waydroid show-full-ui
- 執行casualsnek的指令稿取得裝置ID,進行 Google Play認證,等30分鐘才能登入Google Play。
cd ~/waydroid_script
sudo python3 waydroid_extras.py -i
2. 安裝新版libhoudini#
此處要將casualsnek Waydroid指令稿提供的libhoudni換成從WSA抽取的libhoudni,版本較新。
- 製作自訂libhoudini
git clone https://github.com/natsumerinchan/libhoudini-package.git
cd libhoudini-package
zip -r libhoudini.zip system
- 取得該壓縮檔的MD5數值
md5sum libhoudini.zip
- 將這個zip移動到Waydroid指令稿的下載目錄
sudo mv libhoudini.zip ~/.cache/waydroid_script/downloads/
- 編輯casualsnek的Waydroid指令稿
cd ~/waydroid_script
vim waydroid_extras.py
- 找到函數
install_houdin()
,將下載檔案的MD5改成上面取得的MD5數值
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服務停止
sudo systemctl stop waydroid-container
- 安裝libhoudini,這樣指令稿會直接使用剛剛製作的libhoudini.zip。
sudo python3 waydroid_extras.py -l
- 重新啟動Waydroid並進入桌面
sudo systemctl start waydroid-container
waydroid show-full-ui
3. 在Waydroid啟動原神#
有了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內部。
cd ~
git clone https://github.com/ilhan-athn7/WSA_houdini_A12.1.git
adb connect <Waydroid的IP>:5555
adb -s <Waydroid的IP>:5555 push ~/WSA_houdini_A12.1/GI_affinity_workaround/* /sdcard
- 開啟Waydroid shell
sudo waydroid shell
cd /sdcard
- 執行第一個指令稿。此指令稿不會對遊戲作任何修改,僅是啟動原神,並限制只使用二個CPU核心,這樣才能解決原神讀取資料閃退的問題。
sh Genshin_start.sh
- 在讀取完遊戲資料(看到大門)後,執行第二個指令稿解除核心限制
sh Genshin_8core.sh
這樣應該就可以玩了,Intel UHD 630內顯跑中等畫質的FPS還行。因為是Android版,RAM佔用不多,但畫質再調高可能就會閃退。
Scrcpy目前無法配合Waydroid執行,鍵盤映射暫時不可用。不過Waydroid在最新版本加入了將滑鼠點擊轉換成觸控事件的功能,還有假裝Wifi連線:
waydroid prop set persist.waydroid.fake_touch "*"
waydroid prop set persist.waydroid.fake_wifi "*"
希望Android 11和這些功能可以盡早進入穩定階段囉。