快轉到主要內容

Waydroid教學:在Arch Linux電腦跑Android APP

· 民國112年癸卯年
· ·
分類   資訊科技 虛擬機與容器技術
標籤   Waydroid Arch Linux Android
目錄

Waydroid是Anbox配合Halium技術開發的LXC Android容器,可在GNU/Linux系統執行Android APP。

  • 作業系統:Arch Linux
  • Waydroid映像檔版本:LineageOS 18 (Android 11)
  • CPU: Intel I5-7400
  • GPU: Intel UHD 630

0. Waydroid特色
#

以下是Waydroid的特色功能:

  • Linux平台自由開源的Android容器解決方案
  • 支援x86與ARM架構的裝置
  • 與宿主機共用剪貼簿
  • 直接使用電腦顯示卡硬體加速,跑3D遊戲、看影片沒什麼問題。
  • 內建GAPPS,可以使用Google Play
  • 支援給x86裝置安裝ARM轉譯器
  • 支援安裝Widevine DRM模組
  • 支援Magisk

1. 設定顯示卡與Linux核心
#

根據開發者說法,由於Nvidia閉源驅動不照圖形驅動程式標準走的緣故,目前Waydroid只支援Intel和AMD的顯示卡,Nvidia顯示卡會沒畫面,若您為Nvidia顯示卡建議改用其他Android模擬器方案

切換至Wayland
#

Waydroid必須使用Wayland顯示協定,用此指令檢查目前的工作階段是否為Wayland:

echo $XDG_SESSION_TYPE

若顯示X11代表不是Wayland。GNOME和KDE可在登入畫面切換至Wayland工作階段。

如果想在X11工作階段使用Waydroid,請安裝Weston,啟動巢狀Wayland工作階段。

安裝binder核心模組
#

Waydroid要求Linux核心支援binder核心模組,但Arch Linux預設的linux核心並無開啟此選項,因此需要從AUR安裝binder_linux-dkms補齊。

yay -S  binder_linux-dkms

安裝後載入binder核心模組

sudo modprobe binder-linux devices=binder,hwbinder,vndbinder

設定開機自動載入核心模組

echo "binder_linux" | sudo tee -a /etc/modules-load.d/binder_linux.conf

echo "options binder_linux devices=binder,hwbinder,vndbinder" | sudo tee -a /etc/modprobe.d/binder_linux.conf

2. 安裝Waydroid
#

  1. 安裝以下套件,讓Linux與Waydroid共享剪貼簿
sudo pacman -S python-pyclip wl-clipboard xclip
  1. 從AUR安裝Waydroid
yay -S waydroid
  1. 初始化Waydroid,下載含有GAPPS的Android系統映像檔
sudo waydroid init -s GAPPS -f
  1. 啟動Waydroid容器服務
sudo systemctl start waydroid-container

# 開機自動啟動
sudo systemctl enable waydroid-container
  1. 點選應用程式列表的「Waydroid」圖示開啟主畫面,或者使用指令:waydroid show-full-ui

  2. 若Waydroid無法連上網路,開放UFW防火牆:

sudo ufw allow 53

sudo ufw allow 67

sudo ufw default allow FORWARD

sudo ufw reload

sudo systemctl restart waydroid-container

3. 將Waydroid註冊為Google裝置
#

  1. Waydroid第一次開機可能會收到Device is not Play Protect certified的通知,無法登入Google帳號。

  2. 用以下指令取得Waydroid的裝置ID。該指令會印出一長串數字。

sudo waydroid shell

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帳號,輸入裝置ID註冊,等個半小時應該就能登入Google帳號了。如果還是不行就重新啟動Waydroid容器服務:
sudo systemctl restart waydroid-container
  1. 現在可以安裝APP了,Google Play和F-Droid會自動篩出適合x86架構的APP。

4. 安裝ARM轉譯器
#

很多APP只為手機的ARM架構打造,但大多數電腦都是x86架構,為此你需要安裝ARM轉譯器才能執行ARM架構的APP。

目前ARM → x86的轉譯器有libhoudini和libndk,前者比後者穩定些。casualsnek指令稿的libhoudini是從Microsoft Android Subsytem for Windows所抽取出來。

  1. 取得casualsnek製作的指令稿,安裝libhoudini:
sudo pacman -S lzip sqlite python3 python-pip

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
  1. 重啟Waydroid
sudo systemctl restart waydroid-container
  1. 試著安裝Subway Surfers這款僅提供ARM架構的小遊戲。如果開的起來代表ARM轉譯器正常運作。

5. 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

強制螢幕旋轉
#

安裝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"

模擬觸控功能
#

安裝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"

用指令安裝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

s

Linux與Waydroid共享資料夾
#

為了不影響其他檔案,我建議在兩邊新增一個專門用於共享的資料夾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無線指令傳輸檔案。

多開APP
#

Waydroid設計上沒辦法多開作業系統。但是你可以透過Shelter在一個系統雙開APP。

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

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

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

參考資料
#

相關文章

Arch Linux安裝Docker Desktop圖形前端的方法
分類   資訊科技 虛擬機與容器技術
標籤   Docker Arch Linux
在Arch Linux上安裝QEMU/KVM和Virt Manager虛擬機軟體
分類   資訊科技 虛擬機與容器技術
標籤   Arch Linux QEMU-KVM Libvirt
在Linux安装Windows 11 QEMU虛擬機時啟用Secure Boot和TPM 2.0
分類   資訊科技 虛擬機與容器技術
標籤   Windows QEMU-KVM Libvirt

留言板

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

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