ReDroid是一個開源雲手機的解決方案。不同於一般的Android模擬器,ReDroid是用Docker跑Android系統,再透過Scrcpy連線到桌面,支援GPU加速。
實際使用例: 自架Android雲手機
之前介紹的ReDroid安裝以Linux實機環境為主,本文特解說如何在Windows透過WSL安裝ReDroid。
1. 硬體需求#
- Windows 11
- 四核心以上x86架構CPU,CPU需支援虛擬化
- 8GB(含)以上RAM
- 10GB以上硬碟空間
- 熟悉Linux指令
2. 準備WSL環境#
參考 這篇,啟用Hyper-V,安裝WSL。
如果有Nvidia顯示卡,請安裝 WSL專用的Nvidia驅動。
3. 重新編譯WSL核心#
根據 開發者的指示,WSL預設的Linux核心缺少ReDroid所需的核心功能,且不支援動態載入核心模組,所以得整個重新編譯。
- 點選Ubuntu圖示,登入WSL,安裝編譯Linux核心所需的套件
sudo apt update
sudo apt install wget build-essential bison flex libncurses-dev libssl-dev libelf-dev bc pahole
- 查看Linux核心版本
uname -a
# 範例輸出:5.15.90.1
- 從Github儲存庫下載核心原始碼。
wget https://github.com/microsoft/WSL2-Linux-Kernel/archive/refs/tags/linux-msft-wsl-5.15.90.1.tar.gz
- 解壓縮
tar -xvf linux-msft-wsl-5.15.90.1.tar.gz
- 複製核心設定檔
cd WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1
cp Microsoft/config-wsl .config
- 接著要啟用核心功能。參考 自行編譯WSL核心,使用menuconfig將以下核心功能開啟:
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
- 開始編譯核心,大約30分鐘
make -j8
開啟檔案總管,點選檢視 → 顯示隱藏項目,點選左下角的「Linux」,到
Ubuntu\home\user\WSL2-Linux-Kernel-linux-msft-wsl-5.15.90.1\arch\x86\boot\
資料夾,剪下bzImage
檔案將
bzImage
移動到任意資料夾,例如C:\Users\使用者名稱\wslcustomkernel
在使用者家目錄(
C:\Users\使用者名稱\
),右鍵新增.wslconfig
檔案右鍵用記事本開啟
.wslconfig
,輸入以下內容儲存。kernel
代表核心bzimage所在的硬碟資料夾。
[wsl2]
kernel=C:\\Users\\使用者名稱\\wslcustomkernel\\bzImage
memory=4GB
- 回到WSL終端機,退出WSL
exit
- 再開一個終端機(以系統管理員執行),將WSL關機
taskkill /F /im wslservice.exe
wsl --shutdown
- 重新登入WSL。
wsl -d Ubuntu
- 確認核心版本是否已經成功變更
uname -v
- 範例輸出,核心編譯日期顯示為今天,代表核心已成功變更。
4. 安裝Docker#
- 安裝Docker,啟動服務
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo groupadd docker
sudo usermod -aG docker $USER
- 測試安裝是否成功
sudo docker run hello-world
- 啟動ReDroid,跑Android 11的容器
sudo docker run -itd --rm --privileged \
--pull always \
-v ~/data:/data \
-p 5555:5555 \
redroid/redroid:11.0.0-latest
用
sudo docker ps
指令查看Docker容器狀態如果不使用
restart=always
引數,則每次開啟WSL,上面的指令就需要重新執行一次。
6. 連線至ReDroid桌面#
於Windows下載 Platform Tools,解壓縮。
進入Platform Tools資料夾,按SHIFT+右鍵開啟終端機
用以下指令連線到ReDroid,成功的話會顯示
connected to localhost:5555
./adb connect localhost:5555
Windows下載 QtScrcpy,解壓縮點選Qtscrcpy.exe執行。
開啟後按二下
localhost:5555
的裝置,即會看到ReDroid桌面。
7. 安裝GMS和ARM轉譯器#
預設的ReDroid什麼都沒有,APK得透過ADB指令安裝。
其餘東西開發者說要自己寫Dockerfile建置。
如果需要Google Play服務,和ARM → x86轉譯器,請看 這篇。
ReDroid預設可能是用軟體解碼渲染,參考 WSL Docker啟用OpenGL嘗試讓GPU工作。