快轉到主要內容

Waydroid使用技巧:解決沒網路、觸控沒反應、註冊Play商店、安裝ARM轉譯器

· 民國114年乙巳年
·
切換繁體/簡體
分類   資訊科技 虛擬機與容器技術
標籤   Waydroid Linux Android
目錄

這篇是針對Linux的Android容器「Waydroid」所寫的一篇綜合性文章。Waydroid使用的Android系統是基於LineageOS建置的,並與Linux宿主機共用核心。Ivon將會討論一些操作Android常常會遇到的問題。

請先在Linux系統安裝Waydroid:Ubuntu安裝Waydroid

Waydroid的操作指令
#

Waydroid執行時的Android系統資料放在~/.local/share/waydroid/data/,系統映像檔位於/var/lib/waydroid,APP圖示位於~/.local/share/applications/

啟動Waydroid容器服務

sudo systemctl start waydroid-container

停止Waydroid容器服務

sudo systemctl stop waydroid-container

如何更新Android系統?用此指令停止容器,並下載最新映像檔:

sudo waydroid upgrade

# 更完整的寫法,從官方更新頻道,下載最新版內建GAPPS的映像檔
sudo waydroid init -c https://ota.waydro.id/system -v https://ota.waydro.id/vendor -s GAPPS -f

用指令開啟Waydroid主畫面

waydroid show-full-ui

查看系統錯誤訊息

waydroid log

sudo waydroid logcat

Waydroid可以用指令安裝APK

waydroid app install <APK檔案路徑>.apk

Wyadroid啟動後會自動開啟ADB偵錯,用以下指令進入Android ADB shell,內建Root權限

sudo waydroid shell

如何開啟開發人員選項?開啟Android系統設定 → 關於手機 → 版本號碼,點五下。之後Android系統設定 → 系統就會出現開發人員選項。

將Waydroid語言改成中文
#

在Android的界面開啟Settings → System → Languages,加入中文,並將滑桿拉到最上面。

Android的時間應該會在調整語言之後,自動依照時區和網路時間同步。

解決Waydroid沒有網路
#

請嘗試開放防火牆通訊埠,依照發行版不同防火牆也不同,可能有Firewalld、UFW、iptables等等。

Ubuntu的UFW指令:

sudo ufw allow 53

sudo ufw allow 67

sudo ufw default allow FORWARD

sudo ufw reload

Fedora的Firewalld指令:

sudo firewall-cmd --zone=trusted --add-interface=waydroid0 --permanent

再重新啟動Waydroid:

sudo systemctl restart waydroid-container

如果還是不行,可能是Waydroid跟Docker網路衝突。我們沒有必要關閉Docker,只要修改Waydroid網路設定檔:

sudo vim /usr/lib/waydroid/data/scripts/waydroid-net.sh

關閉LXC_USE_NFT:

LXC_USE_NFT="false"

再重新啟動Waydroid應該就可以了。

sudo systemctl restart waydroid-container

Google Play商店裝置註冊
#

Waydroid基於LineageOS建置,雖然內建GMS服務,但是第三方ROM不向Google註冊裝置的話,是無法存取Google Play商店的。

  1. 進入Android的shell
sudo waydroid shell
  1. 執行以下指令,會迸出一長串代碼,即GMS的裝置ID。如果沒有輸出,請確認Waydroid是否有正常連上網路。
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

安裝ARM轉譯器
#

ARM架構的電腦可以跳過此步驟。

鑑於大多數電腦都是x86架構,而許多手遊只提供ARM架構的APK,因此需要一個將ARM指令翻譯成x86的指令的軟體。

如何確認APP只有ARM架構?預設沒有ARM轉譯器的情況下,Google Play可能不會顯示特定APP。也可以在安裝APK後,透過Package Manager查看這個APP是否含有/lib/x86_64的函式庫,如果只有ARM,那麼開起來會崩潰。需要安裝ARM轉譯器。

目前ARM轉譯器有Intel研發的「libhoudini」和Google研發的「libndk」,都是專有軟體。根據Arch Wiki資料,libhoudini適合Intel CPU使用,而libndk適合AMD CPU使用,有針對處理器性能優化。可能有的APP可以在其中一個運作,另一個卻不行,需要多方測試。請注意:不要同時安裝兩個ARM轉譯器。要安裝另外一個的時候,你應該執行下述的指令稿,選取Remove舊的再安裝新的轉譯器。

  1. 取得casualsnek製作的指令稿,安裝依賴套件
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
  1. 執行指令稿,用空白鍵選取libhoudini或者libndk,然後Enter安裝,安裝ARM轉譯器。ARM轉譯器嚴格對應Android版本,不可以跨版本混用。
sudo venv/bin/python3 main.py
  1. 重啟Waydroid
sudo systemctl restart waydroid-container
  1. 有時候Google Play可能還是不會顯示x86架構以外的應用程式,為此您需要到ApkMirror找ARM架構的APK來裝,看能否正常開啟。

  2. 如果ARM轉譯器執行特定APP有問題,嘗試到Waydroid的Github issue回報,看看有沒有社群製作的patch能用。例如針對《蔚藍檔案》遊戲,有玩家製作了這個指令稿修復登入崩潰的問題。

  3. 更新Waydroid系統之後可能需要重裝ARM轉譯器。

開啟多視窗懸浮模式
#

用以下指令設定為true,讓Waydroid開啟多視窗模式,允許在同一個畫面執行多個APP。

waydroid prop set persist.waydroid.multi_windows true

sudo systemctl restart waydroid-container

建議在Android開發人員選項開啟「允許自由形式視窗」。

之後Linux應用程式選單的Waydroid全螢幕按鈕就會消失,無法再使用Android桌面,只剩下APP圖示。

APP開啟後,會變得好像Linux的原生應用程式一般,能夠自由調整視窗大小。按F11暫時進入全螢幕。

有些APP可能依然會以全螢幕啟動,需要按F11進入視窗模式。

個人覺得Android 11的視窗管理不完善,有些APP縮放後會壞掉,或者根本無法縮放。覺得出問題的話就把這功能關掉:

waydroid prop set persist.waydroid.multi_windows false

sudo systemctl restart waydroid-container

另外Android也有內建「自由形式」視窗功能,這會讓APP只在Waydroid的視窗內自由縮放。

Linux與Waydroid共享目錄
#

Waydroid啟動後的資料位於~/.local/share/waydroid/data/media/0/目錄。這裡是Android的內部儲存空間,需要Root權限才能存取。

如果使用KDE Dolphin檔案管理器6.0以上版本進入,可以申請Root權限強制讀取Android的檔案。

或者,使用掛載一般權限目錄的方式來存取檔案。為了不影響其他檔案,我建議在兩邊新增一個專門用於共享的資料夾WaydroidShared。使用mount指令,將Linux的~/WaydroidShared掛載到Waydroid裡面的WaydroidShared資料夾:

sudo mount --bind  ~/WaydroidShared ~/.local/share/waydroid/data/media/0/WaydroidShared

sudo chmod -R 777 ~/.local/share/waydroid/data/media/0/WaydroidShared

您也可以用ADB指令無線傳輸檔案。Waydroid的IP到Android系統設定 → 關於查看。

adb connect Waydroid的IP:5555

adb push "本機目錄" "Android的目錄" 

APP模擬Wifi連線
#

部份APP會要求開啟Wifi才能下載,不然會以為你只有行動數據,那麼就如它所願,開啟fake wifi。

安裝Package Manager,用於查看APP的套件名稱。

使用以下語法設定:

waydroid prop set persist.waydroid.fake_wifi "套件名稱"

例如給Mihon漫畫閱讀器開啟模擬Wifi,並在該APP設定開啟允許非Wifi下載,然後重新啟動容器:

waydroid prop set persist.waydroid.fake_wifi "app.mihon"

sudo systemctl restart waydroid-container

APP模擬觸控點擊
#

安裝Package Manager,用於查看APP的套件名稱。

有些APP認不到滑鼠點擊,需要啟用fake touch:

waydroid prop set persist.waydroid.fake_touch "套件名稱"

例如給Fate/Go遊戲開啟模擬觸控,然後重新啟動容器:

waydroid prop set persist.waydroid.fake_touch "com.aniplex.fategrandorder"

sudo systemctl restart waydroid-container

如果APP開啟模擬觸控之後還是無法點選,請考慮使用其他方案,譬如:搭配Scrcpy操作Waydroid

強制旋轉APP螢幕方向
#

安裝Rotation Control這類APP,即可強制調整Waydroid螢幕方向。

Waydroid可能無法調整成直向螢幕解析度,除非你使用可以旋轉螢幕的Linux平板。要直向使用APP,建議:搭配Scrcpy操作Waydroid

調整APP音量
#

開啟Android系統設定 → 音訊,調整音量。

實體鍵無法控制Android容器內的音量,所以得另外安裝調整音量的APP。放在Android桌面當作小工具,或者是用Sound Quick Settings,新增一個音量調整按鈕到Android通知欄。

Linux宿主機的音量控制面板可以單獨將Waydroid的輸出靜音,譬如pavucontrol

另外,Waydroid可以存取Linux的麥克風,Android APP應該能夠正常錄製音效。麥克風音量同樣能夠從pavucontrol控制面板調整。

APP截圖
#

Android的多工畫面有單個APP的截圖按紐。

沒有快捷鍵能夠觸發Android的截圖,所以就用Linux端的截圖軟體吧。

或者,安裝Screenshot Tile,Android的通知欄就會多出一個原生截圖按鈕。

多開APP
#

Waydroid設計上沒辦法開啟多個實例。

但是你可以透過Shelter的工作設定檔功能,在一個Android系統雙開APP。

不想要Waydroid APP圖示出現在Linux桌面
#

Waydroid的Android APP圖示位於~/.local/share/applications/waydroid.*

寫個指令稿於Waydroid關閉後刪除之。

在X11桌面啟動Waydroid
#

如果不方便使用Wayland工作階段,就用巢狀Wayland工作階段解決。

參見:在Linux X11桌面用Weston啟動Waydroid,不依賴Wayland協定桌面

Nvidia顯示卡以軟體渲染強制啟動Waydroid
#

撰文當下Nvidia閉源驅動版本575,Waydroid只支援Intel與AMD的顯示卡,不支援Nvidia。如果硬要在Nvidia顯示卡跑的話就只能改用軟體渲染啟動Waydroid。此模式下無效能可言,無法玩遊戲。

  1. 初始化Waydroid
sudo waydroid init -s GAPPS -f
  1. 編輯設定檔
sudo vim /var/lib/waydroid/waydroid.cfg
  1. 填入以下內容,啟用SwiftShader
[properties]
ro.hardware.gralloc=default
ro.hardware.egl=swiftshader
  1. 套用變更
waydroid upgrade --offline
  1. 重新啟動Waydroid
sudo systemctl restart waydroid-container

參考資料
#

相關文章

樹莓派同時裝Linux與Android APP ~ Waydroid安裝教學
分類   資訊科技 虛擬機與容器技術
標籤   Raspberry Pi Waydroid Android Linux
Waydroid教學:在Arch Linux電腦跑Android APP
分類   資訊科技 虛擬機與容器技術
標籤   Waydroid Arch Linux Android
Linux系統QEMU/KVM指令教學,安裝UEFI開機的虛擬機
分類   資訊科技 虛擬機與容器技術
標籤   Linux QEMU-KVM QEMU

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

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