ReDroid為一款開源雲手機解決方案,讓你將Android系統部署在x86與ARM架構的Linux電腦,遠端控制Android玩遊戲。
ReDroid得透過Docker部署,啟動速度十分之快,待機狀態下不太吃資源,效能可跟基於LXC的Waydroid相比,還支援多開。
為何要用ReDroid呢?因為它本來就是設計給遠端存取用的,較適合headless伺服器環境,不像 樹莓派跑Waydroid需要顯示器才能輸出。
之前寫過 x86電腦部署ReDroid的教學,這裡要用ARM架構的樹莓派。相較於x86架構電腦,ARM架構的優勢是不需要libhoudini轉譯器就能執行大多數手機的APP。並且從 樹莓派5跑LineageOS系統的跑分來看,樹莓派5的處理器效能已接近一台中低階Android手機,玩一些不吃效能的手遊完全是夠的。
影片演示:
1. 環境#
- Raspberry Pi 5 8GB
- Raspberry Pi OS (Debian 12 Bookworm)
- 核心版本:Linux raspberrypi5 6.6.42-v8+
- 無接上顯示器
考慮到Raspberry Pi常常是headless運作的,所以得準備另一台電腦或手機,利用Scrcpy無線控制的方式遠端存取Android桌面。
不過在開始下一步之前,建議執行以下指令確認GPU加速是否正常,驅動應會顯示V3DV Mesa
。
vulkaninfo --summary
2. 前置作業#
根據 ReDroid文件的部署需求,Linux必須啟用binder核心模組,並且要啟用4K Pages、PSI。
- 從
zcat /proc/config.gz
指令的輸出來看,Raspberry Pi 5的核心已經啟用BINDER設定了,所以不用安裝binder核心模組
sudo modprobe configs
zcat /proc/config.gz | grep BINDER
# 輸出
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
- Raspberry Pi 5預設是使用16K Pages,透過調整開機設定檔啟用4K Pages
echo '# 4k pages
kernel=kernel8.img
'| sudo tee -a /boot/firmware/config.txt
- 啟用PSI
sudo sed --follow-symlinks -i 's/quiet/psi=1 quiet/g' /boot/firmware/cmdline.txt
- 重開機,確認4K Pages與PSI狀態
getconf PAGESIZE
ls /proc/pressure
- 如果有裝Waydroid,不要讓它開機自動啟動
sudo systemctl stop waydroid-container
sudo systemctl disable waydroid-container
3. 給ReDroid映像檔安裝GAPPS#
ReDroid作者上傳的映像檔全部都是原生系統。
關於安裝GAPPS的指令稿,我用這個安裝 ayasa520/redroid-script,但作者似乎只有考慮到x86_64的狀況,所以稍做修改,改成下載arm64的版本。
改用這個比較新的指令稿: abing7k/redroid-script安裝。
作者還有提供 abing7k/redroid:a11_gapps_arm打包好的映像檔可以直接用,但是GPU加速似乎有問題。
4. 部署ReDroid容器#
新增存放資料的目錄
mkdir ~/redroid
cd redroid
- 新增docker-compose.yml
vim docker-compose.yml
- 內容如下:
version: "3"
services:
redroid:
# 使用Android 11映像檔
image: redroid/redroid:11.0.0-latest
stdin_open: true
tty: true
privileged: true
# ADB通訊埠
ports:
- "5555:5555"
volumes:
# 資料目錄
- ./redroid-11-data:/data
command:
# 解析度
- androidboot.redroid_width=1080
- androidboot.redroid_height=2160
- androidboot.redroid_dpi=439
- androidboot.redroid_fps=60
# 啟用GPU硬體加速
- androidboot.redroid_gpu_mode=host
- 啟動容器
sudo docker compose up -d
- 取得樹莓派的區域IP
ip addr
5. 使用Scrcpy存取ReDroid桌面#
這裡我使用電腦版的Scrcpy,若要方便其他裝置存取,可於樹莓派部署網頁版的 ws scrcpy,透過瀏覽器連線。
安裝 Scrcpy與ADB工具
讓電腦與樹莓派位於同一個區網,將ADB與樹莓派連線
abd connect 樹莓派IP:5555
- 啟動Scrcpy,遠端連線可能會lag,所以限制畫質
scrcpy -m 1080 -b 5M --audio-codec=aac
這樣就能看到Android桌面了。
如果GPU加速有正常運作,那麼「AIDA64」APP應當能抓到樹莓派的GPU型號。
現在Scrcpy只能透過區網連線,接下來只要再於樹莓派 部署內網穿透服務,就能從外面的網路隨時連線到樹莓派上的雲手機了!