前言¶
用 DSH 做遊戲開發時,驗證環節通常要離開當前流程:打開第三方模擬器(MEmu/LDPlayer/BlueStacks 之類),裝好 Android SDK 工具,在窗口之間來回切換。這類常駐模擬器佔用 GB 級存儲和一大塊內存,即使不測試也在喫資源;另一種做法是手動 adb screencap 把畫面導回來看,延遲高、操作繁瑣。
下面介紹的 lordgrimtaken/dsh-inapp-plugin(Game Lab)把這個問題收進頁面:它調用機器上已有的 Android SDK emulator 工具,按需啓動一個 headless AVD,把遊戲裝進去、在頁面裏玩,空閒後自動關閉。
這是什麼¶
- 插件名稱:dsh-inapp-plugin(頁面內名稱爲 Game Lab)
- 維護者:LordGrimTaken
- 分類:客戶端
- 版本:v1.2(package.json 爲 1.2.0)
- 許可證:MIT
一句話定位:一個 DSH 插件(host + Web UI 兩半),把普通 Android SDK 模擬器改造成頁面內的測試臺,服務於「改遊戲、構建、看真機效果」的循環。它不下載、不安裝任何額外模擬器,也不獲取系統鏡像;機器上沒有 x86_64 鏡像時它只報告缺口,不代下。
畫面通過 adb exec-out screenrecord … - 拿到 H.264 流,頁面用 WebCodecs 在 canvas 上解碼;瀏覽器不支持 WebCodecs 時自動回退到 adb exec-out screencap -p 的 PNG multipart 流。點擊、滑動、鍵盤、手柄按鍵都經 adb 下發到模擬器。
核心功能¶
按需啓動的 headless AVD。 配置的 AVD(默認名 gamelab)不存在時,基於本機已安裝的 x86_64 系統鏡像自動創建。規格爲 720x1280、最多 2 vCPU、使用宿主機 GPU,不開窗口、不用快照。離線畫面會列出所有已安裝的 AVD(/status.avds),可在按 Start 前挑選。
流暢的實時畫面。 H.264 經模擬器編碼器輸出,頁面用 WebCodecs 解碼渲染,實測畫面變化時約 19 fps。WebCodecs 不可用時自動回退到 PNG multipart 流(約 0.7-1.6 fps)。工具欄提供 Smooth/Compat 切換。
完整輸入。 支持點擊、拖拽/滑動、Back/Home/Recents、旋屏、硬件按鍵;Keyboard 面板可輸入 ASCII 文本和 Enter/Space/Backspace/Esc;Pad 面板提供 D-pad、A/B、Start,照顧需要按鍵輸入的遊戲。
遊戲庫與 Build & play。 插件掃描 gameRoots 配置的目錄,按應用名分組 APK(新版本在前,舊版本摺疊顯示),記住上次搜索條件,並列出 Gradle/Capacitor 工程。Play 直接安裝並啓動 APK。Build & play 先檢測工程類型:純 Gradle 走 gradlew assembleDebug;Capacitor 走 npm run android:apk,或 npm run build + npx cap sync android + Gradle。完成後安裝最新 APK 並啓動,/status 返回當前階段。
低空閒佔用。 沒人觀看時 PNG/H.264 循環暫停;模擬器空閒 5 分鐘後停止(可配置),運行中的構建不會被空閒計時器打斷。運行期間保持屏幕喚醒,避免鎖屏凍結遊戲。
診斷信息。 頁面顯示實時 fps/RAM/CPU,支持 logcat 尾部、一鍵截圖,以及狀態 API。
安裝與啓用¶
安裝命令來自 README 原文。注意 plugin_manager 是 DSH 智能體工具,不是 shell 命令:
# 讓 DSH 智能體把這個本地文件夾安裝爲 bundle。
# plugin_manager 是 DSH 智能體工具,不是 shell 命令。
plugin_manager install_bundle target: <克隆到本地的絕對路徑>
智能體工具會把文件夾鏈接進 profile,加入 bundle 選擇並即時激活。如果希望手動配置 profile,參考倉庫內 docs/INSTALL.md。
啓用步驟:
- 重新加載 Harness 頁面,讓客戶端部分加載。
- 點擊左側邊欄的 Game Lab 手柄圖標。
- 點擊 Start emulator,冷啓動約 40-60 秒。
- 把
gameRoots指向你的遊戲目錄,點擊 Play(或 Build & play),用工具欄交互。
系統要求:帶 Web UI 的 DSH、Android SDK(ANDROID_HOME 或 ANDROID_SDK_ROOT)、已安裝的 x86_64 系統鏡像;Build & play 還需要 JDK,Capacitor 工程需要 Node/npm。Windows 是已測試平臺,host 代碼裏有 POSIX 分支但尚未在 macOS/Linux 上驗證。
配置¶
配置寫在 profile 的 cordis.patch.yml 裏,改 game-lab 這一行,或覆蓋 bundle 默認值。可調字段包括 gameRoots、avdName、idleMinutes、ramMb、cores、gpuMode、maxFps。bundle 自帶的示例是:
# profile 中 cordis.patch.yml 的 game-lab 行
gameRoots: [C:\Games]
請把 gameRoots 改成實際存放 APK‑或工程的目錄。完整字段說明見倉庫內 docs/CONFIGURATION.md。
典型用法:跑一次 Build & play¶
以下流程來自 README 的 Quick start 與實測數據:
- 把
gameRoots指向包含 Capacitor 遊戲工程的目錄。 - 點擊 Start emulator,等待冷啓動完成(開發機實測 36-62 秒到可操作)。
- 點擊 Build & play。插件檢測到 Capacitor 工程後依次執行
npm run build、npx cap sync android、Gradle 打包,然後安裝最新 APK 並啓動。開發機實測從模擬器關閉到完成這一步共 71.4 秒。 - 運行期間用 Keyboard 或 Pad 面板操作遊戲,用截圖按鈕保存當前畫面。開發機實測安裝並啓動一個 9.6 MB 的 APK 需 3.7 秒,點擊操作往返延遲約 0.7 秒,模擬器運行時主機佔約 3.1-3.7 GB 內存、約 2.1-2.4 核 CPU。
- 停止觀看後 5 分鐘,空閒停止觸發,內存歸還系統。
更完整的發現與未驗證項見倉庫內 docs/VERIFICATION.md。
適用場景與注意¶
適合在 DSH 裏做遊戲開發、希望構建後立刻看畫面交互,又不想維護常駐第三方模擬器的用戶。它不適合多實例並行測試或對幀率要求高的遊戲:一次只能跑一個模擬器、一個直播觀看者;流暢幀率跟隨畫面變化,靜態菜單可能只有幾幀,快速移動的畫面約 10-20 fps。
幾點注意:
- 模擬器運行時約佔 3.5 GB 內存(Android 14 鏡像加 QEMU 的開銷)。插件只把這筆成本推遲到需要時再付,不減少單次開銷;要降低佔用,應換更輕的系統鏡像或 AVD。
- 插件以當前 DSH 進程的權限運行,安裝前應先檢查源碼與許可證(MIT)。
- 非 ASCII 文本輸入需要先在 AVD 裏安裝 ADBKeyboard,否則只能輸入 ASCII。
- 運行期間需要保持頁面打開,否則畫面流暫停;空閒 5 分鐘後模擬器停止。
結尾¶
Game Lab 的價值在於把「構建—真機驗證」留在 DSH 頁面內,同時避開常駐模擬器的存儲與內存開銷。它只驅動本機已有的 Android SDK 工具,不做任何模擬器或鏡像下載。
- 目錄頁:https://www.skillhub.cn/plugins/LordGrimTaken/dsh-inapp-plugin
- GitHub:https://github.com/LordGrimTaken/dsh-inapp-plugin