多開即同時執行多個APP,這是許多Android模擬器都會提供的功能,通常是在一個畫面塞滿多視窗,達到玩多個遊戲的效果。
既然ReDroid依賴Docker執行,那麼就可以依賴容器的特性,輕鬆達成多開,比如,同時開二個ReDroid容器,執行不同的APP。
啊不對,放錯了…效果圖是這樣才對。
1. 方案探討#
一個Android系統執行多個APP,再個別擷取視窗的作法,在配合Scrcpy的情況下辦不到,所以只好跑多個Android系統,例如跑兩個Docker容器。
後台界面,使用Portainer和docker-compose控制,方便定義多個服務。
至於控制端, Scrcpy支援連接到多個Android機子。
如果要更無縫的體驗,用 QTScrcpy會更好,作者有加入多視窗「群控」功能。這樣就能在一個螢幕開啟多個ReDroid視窗。
另外,網頁版客戶端 ws-scrcpy也有人打包成Docker映像檔( https://hub.docker.com/r/scavin/ws-scrcpy),所以我們就能在瀏覽器用多個分頁存取Android容器啦,出門在外的時候更方便。
2. 新增docker-compose#
參見 ReDroid安裝教學,做好已經安裝GAPPS的映像檔。
於 Portainer新增一個ReDroid的Stack。我覺得單一docker-compose比較好管理,如果要分兩個寫也是可以啦,這樣二個Android裝置可個別開關機。
內容如下,這裡定義了二個ReDroid的容器,他們會一起啟動:
version: "3"
services:
# 第一個ReDroid容器
redroid-1:
image: redroid/redroid:11.0.0_gapps
stdin_open: true
tty: true
privileged: true
# 映射通訊埠不能重複
ports:
- "5555:5555"
volumes:
# 資料目錄,不同裝置目錄不能一樣
- ./redroid-11-1-data/:/data
command:
# 節約效能,解析度不要設定太高
- androidboot.redroid_width=720
- androidboot.redroid_height=1080
- androidboot.redroid_dpi=340
# 啟用GPU硬體加速
- androidboot.redroid_gpu_mode=auto
# 設定libndk相關
- ro.product.cpu.abilist0=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi
- ro.product.cpu.abilist64=x86_64,arm64-v8a
- ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
- ro.dalvik.vm.isa.arm=x86
- ro.dalvik.vm.isa.arm64=x86_64
- ro.enable.native.bridge.exec=1
- ro.dalvik.vm.native.bridge=libndk_translation.so
- ro.ndk_translation.version=0.2.2
# 第二個ReDroid容器
redroid-2:
image: redroid/redroid:11.0.0_gapps
stdin_open: true
tty: true
privileged: true
# 映射通訊埠不能重複
ports:
- "5556:5555"
volumes:
# 資料目錄,不同裝置目錄不能一樣
- ./redroid-11-2-data/:/data
command:
# 節約效能,解析度不要設定太高
- androidboot.redroid_width=720
- androidboot.redroid_height=1080
- androidboot.redroid_dpi=340
# 啟用GPU硬體加速
- androidboot.redroid_gpu_mode=auto
# 設定libndk相關
- ro.product.cpu.abilist0=x86_64,arm64-v8a,x86,armeabi-v7a,armeabi
- ro.product.cpu.abilist64=x86_64,arm64-v8a
- ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
- ro.dalvik.vm.isa.arm=x86
- ro.dalvik.vm.isa.arm64=x86_64
- ro.enable.native.bridge.exec=1
- ro.dalvik.vm.native.bridge=libndk_translation.so
- ro.ndk_translation.version=0.2.2
- 同時啟動二個Android容器,什麼都不做的情況下並不會太吃資源。
3. Scrcpy連線到多個ReDroid容器#
- ADB列出裝置
adb devices
- 以通訊埠為依歸,分別連線
adb connect -s localhost:5555
adb connect -s localhost:5556
- 之後,個別啟動Scrcpy
scrcpy -s localhost:5555
scrcpy -s localhost:5556
唯一一個不便的點在於,每個ReDroid的裝置都是獨立的,所以GAPPS裝置驗證要重跑一次。
同時執行二個遊戲,一般的電腦CPU應該都還撐得住啦。