快轉到主要內容

Linux電腦跑Android APP ~ Ubuntu如何安裝Waydroid

分類   資訊科技 虛擬機與容器技術
標籤   Waydroid Ubuntu Android
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

「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以上系統,安裝指令稿應會自動偵測系統版本。

  1. 確保您不是用Nvidia顯示卡。根據開發者說法,由於Nvidia閉源驅動不照圖形驅動程式標準走的緣故,目前Waydroid只支援Intel和AMD的顯示卡,Nvidia顯示卡會黑畫面,此問題目前尚未解決, 進度可到Github查詢。若您為Nvidia顯示卡建議改用 其他Android模擬器方案

  2. 接著,確保現在是使用Wayland工作階段,輸入以下指令查看:

echo $XDG_SESSION_TYPE
  1. 若顯示的不是wayland代表您還在用X11,請登出Ubuntu,在輸入密碼的時候點選右下角齒輪,選擇Ubuntu或者不帶Xorg的選項登入。

註解:你也可以安裝 weston套件,並打weston指令啟動巢狀Wayland工作階段,再開啟Weston的終端機,達成在X11環境跑Waydroid的作法。

  1. 最後是電腦架構部份,Waydroid支援x86與ARM架構的電腦,安裝套件時程式會自己判斷。理想上 ARM架構的Ubuntu電腦更好,這樣就不需要裝libhoudini轉譯器了。

2. 安裝Waydroid
#

此處的指令只適用Ubuntu與Debian,其他Linux發行版請參考 官方文件

  1. 安裝以下套件,包含Waydroid以及後續指令稿會用到的套件。
sudo apt install curl ca-certificates lzip python3 python3-pip
  1. 加入Waydroid官方儲存庫,安裝Waydroid
curl https://repo.waydro.id | sudo bash
sudo apt install waydroid
  1. 初始化Waydroid,下載內建GAPPS的映像檔
sudo waydroid init -s GAPPS -f
  1. 啟動Waydroid容器服務
sudo systemctl start waydroid-container
# 開機自動啟動
sudo systemctl enable waydroid-container
  1. 在應用程式列表點選「Waydroid」的圖示,啟動Waydroid。

  2. Waydroid預設界面是英文的,請到Android系統設定修改語言,調整時區。

  3. 如果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商店的。

  1. 進入Android的shell
sudo waydroid shell
  1. 執行以下指令,會迸出一長串代碼,即裝置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\";"
  1. Google裝置註冊,填入該代碼

  2. 等30分鐘後,重新啟動Waydroid,就可以使用Play商店了。

sudo systemctl restart waydroid-container

4. 安裝libhoudini轉譯器
#

目前ARM → x86的轉譯器有libhoudini和libndk,前者比後者穩定些。

libhoudini是Intel研發的專有軟體,用於將ARM指令翻譯成x86的指令,性能會有些微損失。

鑑於大多數電腦都是x86架構,所以得裝libhoudini。不裝這個的話,將有一半以上的遊戲無法執行。

  1. 取得 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
  1. 重啟Waydroid
sudo systemctl restart waydroid-container
  1. 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。

延伸閱讀
#

Waydroid官方文件

回報bug請到 Waydroid的Github儲存庫

相關文章

Waydroid教學:在Arch Linux電腦跑Android APP
分類   資訊科技 虛擬機與容器技術
標籤   Waydroid Arch Linux Android
ReDroid,在Windows電腦架設Android雲手機的方法
分類   資訊科技 虛擬機與容器技術
標籤   ReDroid Docker Android Windows Subsystem for Linux Scrcpy
如何在Windows 11安裝WSL2子系統 (Ubuntu)
分類   資訊科技 虛擬機與容器技術
標籤   Windows Subsystem for Linux Docker Ubuntu

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。