在Linux用ReDroid玩FGO
ReDroid (Remote anDroid) 是自架「雲手機」的方案,透過Docker跑Android系統容器,再利用Scrcpy的鏡射螢幕功能連線到Android桌面。

在Linux用ReDroid玩FGO
ReDroid也是在電腦上用開源軟體跑Android APP的解決方案。因為別說雲手機了,很多Android手遊模擬器都是閉源軟體哪。相較之下,ReDroid除了ARM轉譯器以外都是開源的。更棒的是ReDroid支援GPU加速+ARM轉x86的轉譯器,這樣就可以玩大多數手機3D遊戲了。
對Linux用戶來說,這更是除了 Waydroid和Android-x86虛擬機以外,在Linux電腦高效率跑Android APP的方法。並且它比Waydroid更適合當作雲手機使用。參見 自架雲手機
本文將討論如何在x86架構的Linux電腦,用ReDroid玩ARM架構的手機遊戲。我們會在ReDroid映像檔加入ARM轉譯器+Google服務框架,以達成最佳使用體驗。
1. ReDroid環境需求#
任一Linux發行版應該都可以。
本文示範使用x86架構的電腦跑ReDroid。至於ARM架構的電腦,有網友回報Oracle ARM架構伺服器部署成功的案例,我也測試過 可以在樹莓派5跑ReDroid。
如果電腦是x86架構,則只能執行x86架構的Android APP,然而很多手機遊戲只有ARM架構版本,所以ReDroid需要裝libndk或libhoudini的ARM轉譯器。
要玩手遊建議電腦至少8GB以上RAM,因為有時ARM在轉譯成x86指令時會佔用大量RAM。
GPU加速部份,建議使用Intel或AMD的GPU,3D加速開箱即用,Nvidia不建議。
關於Android版本,Redroid作者發布的redroid:11.0.0-latest和redroid:12.0.0-latest映像檔已內建Google開發的ARM轉譯器libndk,我試過只有Android 11比較穩定,GApps也可以用,所以本文選用Android 11的映像檔。
2. 安裝ReDroid前置依賴項目#
ReDroid的 Github有各大Linux發行版的安裝說明,我使用Ubuntu系統做示範。
- 首先要準備binder核心模組。Ubuntu 24.04執行以下指令,安裝必要的核心模組:
1 | sudo apt install linux-modules-extra-`uname -r` |
- 將以上核心模組加入開機自動載入
1 | sudo cat <<EOT >> /etc/modules-load.d/redroid.conf |
若想要整合按鍵映射的圖形化Scrcpy界面,可以改裝 QtScrcpy。您還可以嘗試網頁版的 ws-scrcpy。
3. 預先給ReDroid映像檔安裝GApps#
ReDroid作者發布的映像檔是原生Android,沒有預裝GApps。我們可以透過ayasa520的 Remote-Android Script指令稿,自動拉取ReDroid映像檔並將GApps裝上去。僅支援Android 11的映像檔。
這個指令稿也可以用來安裝libndk、libhoudini、Magisk、Widevine DRM等元件。
- 複製Remote-Android Script儲存庫,建立Python虛擬環境
1 | sudo apt install lzip python3 python3-venv python3-pip |
- 拉取Android 11的映像檔,並安裝GApps
1 | venv/bin/python3 redroid.py -a 11.0.0 -g |
- 這樣就會得到包含GApps的映像檔
redroid/redroid:11.0.0_gapps了。
4. 以docker-compose啟動ReDroid容器#
- 建立跑ReDroid的虛擬機(僅Nvidia GPU需要)因Nvidia閉源驅動無法讓ReDroid使用GPU加速,需要跑一個QEMU虛擬機,再在裡面裝ReDroid透過virtio-gpu達成硬體加速。不然的話ReDroid會走軟體渲染。
建立跑ReDroid的虛擬機。
下載Ubuntu 22.04 ISO,安裝QEMU + Virt Manager,建立一個64GB的Ubuuntu虛擬機
1 | qemu-img create -f qcow2 ubuntu.qcow2 64GB |
開機進虛擬機,然後再 裝Docker。
1 | qemu-system-x86_64 -enable-kvm -smp 4 -device intel-hda -device hda-duplex -device virtio-vga-gl -net nic -net user,hostfwd=tcp::5555-:5555 -cpu host -m 4096 -display sdl,gl=on -hda ubuntu.qcow2 |
- 建立存放Android資料的目錄,並新增docker-compose
1 | mkdir ~/redroid |
- 填入以下內容,使用剛剛建立的GApps映像檔
1 | version: "3" |
- 啟動服務
1 | sudo docker compose up -d |
- 用ADB連線至本機的ReDroid。因為是本機,所以IP填寫localhost,如果ReDroid部署在遠端,就改成寫遠端主機的IP。
1 | adb connect localhost:5555 |
- 執行Scrcpy,連線到Android:
1 | scrcpy -s localhost:5555 --audio-codec=aac |
這樣就會看到Android的桌面了。

Google Play服務可能會跳出「裝置未驗證」的錯誤訊息。
執行以下指令取得Android裝置ID,到 Google網站註冊裝置,等個30分鐘後重新啟動Redroid容器,才能登入Google Play。
1 | adb -s localhost:5555 root |
要確認ReDroid的3D加速是否有正常運作,請安裝「AIDA64」看能否認到你電腦的GPU型號。
建議要加強安全性的,將ReDroid的docker-compose網路設定為只監聽本機localhost的通訊埠(
ports: 127.0.0.1:5000:5000)。如果要將ReDroid開放外網存取,請注意設定防火牆,不要將ADB的5000通訊埠直接暴露到公網,否則會有嚴重安全性疑慮。
5. ReDroid如何安裝APK#
目前即使有安裝libndk,Android 11的Play商店還是不給下載ARM架構的APP,請配合APKPure之類的應用程式商店安裝APP。
除了用容器內部的瀏覽器下載APK外,你還可以用ADB安裝APK至ReDroid容器。比方說到 ApkMirror下載Line的APK,接著用ADB安裝:
1 | adb -s localhost:5555 install "jp.naver.line.android.apk" |
你也可以用ADB的pull和push指令傳輸檔案。
6. ReDroid如何「開關機」#
如果要將ReDroid關機,將Scrcpy視窗關閉後,停止容器:
1 | cd ~/redroid |
之後可以再用此指令啟動ReDroid。ReDroid容器的/data資料位於~/redroid/redroid-11-data目錄,可以用來備份多個系統的檔案。
1 | cd ~/redroid |
7. ReDroid多開示例#
附錄#
手動安裝GApps到ReDroid映像檔
ReDroid 作者說Google服務框架是專有軟體無法內建,那麼就得自行安裝了。第一個方法是重新編譯ReDroid映像檔,第二個是手動安裝OpenGApps。
不推薦第一個方法,耗時而且作者提供的GApps編譯教學又有其他APP偵測不到的問題。
這裡採用第二個方法:手動安裝。
到 OpenGapps下載x86_64架構的Android 11 GApps,選擇最小化的pico版。
解壓縮,會看到以下目錄
1 | open_gapps-x86_64-11.0-pico-20220503 |
在解壓縮的目錄
open_gapps-x86_64-11.0-pico-20220503下面新增system目錄。接著,將
Core和GApps目錄裡面的.lz檔案都解壓縮,並將裡面的APK目錄按照對應的安裝目錄放到system目錄。例如GApps/googletts-x86_64/nodpi/app/下的GoogleTTS目錄要放到/system/app。放好之後,
system下的目錄結構應該會長這樣:
1 | system |
- 執行以下指令取得root權限:
1 | adb connect localhost:5555 |
- 接著將
system目錄推送到ReDroid系統,並賦予權限:
1 | adb -s localhost:5555 push system / |
- 重新啟動ReDroid容器:
1 | cd ~/redroid |
- 啟動Scrcpy
1 | scrcpy -s localhost:5555 --audio-codec=raw |
- 開啟系統設定 → 應用程式,點選右上角顯示系統應用程式,將Google Play服務和Play商店的權限都開啟。
手動抽取libndk建置Android映像檔
libndk是Google開發的專有軟體,含在Android Studio的模擬器裡面。根據 ReDroid作者指示,我們可以手動從新版Android模擬器抽取libndk,再將其塞到ReDroid原生系統裡面。
這裡以Android 13為例,注意作者沒保證說一定能用。
安裝Android Studio,新增Android 13的虛擬機
透過ADB連線
將libndk打包
1 | { find /system -name arm* -type d; find /system -name *ndk_translation*; find /system/etc -name *arm*; } | tar -cf /sdcard/nb.tar -T - |
- 將libndk.so打包
1 | find system -type l | tar -cf /sdcard/so.tar -T - |
- 退出ADB,將以上檔案傳回本機
1 | exit |
- 將libndk.so加入到libndk的壓縮檔
1 | tar -xvf so.tar |
- 新增
DOCKERFILE,填入以下內容:
1 | FROM redroid/redroid:13.0.0-latest |
- 開始建置含有libndk的Android 13映像檔,之後這個映像檔
redroid:13.0.0-libndk就能拿去執行容器了。
1 | docker build . -t redroid:13.0.0-libndk |
