DSH Android:在對話裏投流並操作 Android 設備

前言

在 DeepSeek Harness(DSH)裏做 Android 開發或自動化,常見做法是截圖來回傳、手動跑 adb,或另起一套 Appium / UIAutomator 腳本。Agent 看得到日誌,卻難在對話裏直接「看見」設備畫面,你也很難在同一會話裏點按、拖拽、讀 logcat。

DSH Android 把這條鏈路收進一個插件:通過 adb 驅動模擬器或 USB 手機,在對話側邊欄呈現即時畫面,並提供 20 個 agent 工具供構建、交互與調試。下面介紹它的定位、能力與安裝用法。

這是什麼

DSH Android(npm 包 @zseven-w/dsh-android)是 DeepSeek Harness 的客戶端類插件,由 ZSeven-W 維護。當前插件版本爲 0.1.0-rc.4,已在 DSH 0.1.1-rc.1 上驗證;GitHub 倉庫約 95 stars、6 forks。

一句話定位:在 DSH 對話中構建、運行並與一臺在線的 Android 設備(模擬器或 USB 手機)交互,全程由 adb 驅動,不依賴外部流服務或 loopback 端口代理。

核心功能

單一 adb 代碼路徑

adb devices -l 報出的 serial 是設備唯一身份——emulator-5554、USB serial、ip:port 目標行爲一致。插件不綁定特定模擬器產品(AVD、Genymotion、WSA 等),也不區分「模擬器棧」與「真機棧」。

進程內直播流與側邊欄面板

開流後,插件用常駐 adb exec-out 子進程循環執行 screencap -p,宿主自行切幀,生成 multipart/x-mixed-replace PNG 流,經 DSH webserver 的簽名路由 /_dsh/dsh-android/* 送到界面。瀏覽器不與 adb 直接通信,也沒有可代理的內部流端口。

側邊欄面板渲染即時畫面,支持在視頻上點擊、拖拽,工具欄提供返回、主頁、多任務,以及旋轉、截圖、刷新;設備菜單可觸發通知欄、快捷設置、鎖屏、喚醒、語音助手等動作。

20 個 agent 工具

工具在任何宿主上都會註冊,返回純 JSON;可視內容經 presentationMeta 與簽名路由呈現,不作爲 image block 直接塞給模型(支持圖像輸入的模型上,截圖類工具另有原生多模態路徑)。

座標一律是流畫面的歸一化 0..1,幀跟隨顯示旋轉,input tap 與流共用同一座標空間。

核心工具包括:

工具 作用
android_devices 枚舉 adb 設備與本機 AVD 列表
android_boot 對在線 serial 開流,或先啓動指定 AVD 再開流
android_shutdown 關閉模擬器並停流(實體機 adb 無法關機,會明確拒絕)
android_screenshot 抓取 PNG,返回 JSON 摘要
android_interact 點擊、輸入、按鍵、手勢、滾動
android_list_apps / android_launch_app 列舉與啓動已安裝應用
android_build_run ./gradlew assembleDebug、安裝 debug APK 並啓動

UI 自動化側提供 android_ui_treeandroid_tap_elementandroid_ui_rowsandroid_tap_row(基於 uiautomator)。日誌與調試側提供 android_logsandroid_processesandroid_backtraceandroid_meminfoandroid_app_info

OCR 工具 android_find_textandroid_tap_textandroid_wait_for 依賴 macOS 上的 Apple Vision 框架,僅在 macOS 宿主可用;Linux 與 Windows 上其餘 17 個工具不受影響。

安全模型

流與截圖路由要求 loopback 對端、loopback Host(拒絕 DNS 重綁定)、Fetch-Metadata/Origin 同源校驗;HMAC-SHA256 capability 約 10 分鐘內過期。截圖路徑逐級 lstat、拒絕符號鏈接,並用 realpath 做包含性校驗。

安裝與啓用

插件以當前 DSH 進程權限運行,安裝前應閱讀 GitHub 源碼 與 MIT 許可證,確認環境中有可信的 adb 與 Android 設備。

環境要求(摘自官方 README):

  • Node ≥ 24.11.0
  • adb(Android SDK platform-tools),解析順序:ADB 環境變量 → PATH → SDK 默認路徑
  • 一臺 adb 可見的設備(模擬器或開啓 USB 調試的手機)
  • 帶 web bundle 的 DSH ≥ 0.1.0-rc.6 纔有側邊欄面板;headless 配置下 20 個工具仍可用

先安裝插件並啓動 web 會話:

dsh plugin --profile web add @zseven-w/dsh-android@latest
dsh web

也可把包加入既有 profile 的依賴:

pnpm add @zseven-w/dsh-android

非 ASCII 文本輸入(中文、emoji)需可選安裝 ADBKeyboard 並設爲當前輸入法;未安裝時相關輸入會被拒絕並給出提示。

典型用法

官方快速上手流程如下。

  1. 發現設備——讓 agent 調用 android_devices,取得 serial 或 AVD 名。
  2. 開流——對 emulator-5554 等在線 serial 調用 android_boot;傳 AVD 名會先冷啓動模擬器(可能需數分鐘),隨後面板顯示即時畫面。
  3. 交互——在面板上直接點按,或讓 agent 用 android_interact;結構化點擊可走 android_ui_tree + android_tap_element;控件樹不可用時在 macOS 上可用 OCR 工具。
  4. 構建運行——對 Gradle 工程調用 android_build_run,指定 projectPath;完整構建耗時數分鐘,成功後應用安裝並啓動。
  5. 讀日誌——android_logs 可按包名過濾,例如查看某應用最近兩分鐘的 logcat。

示例對話意圖與工具對應關係:

列出 Android 設備。          → android_devices
把 emulator-5554 投出來。    → android_boot
打開設置,然後點顯示。        → android_interact 或 android_ui_tree + android_tap_element
構建並運行 /path/to/MyApp。  → android_build_run
看 com.example.app 最近兩分鐘的 logcat。 → android_logs

適用場景與注意

適合誰

  • 在 DSH 對話裏做 Android 應用聯調、UI 驗證、logcat 排查的開發者
  • 希望 agent 能驅動真實 adb 設備、而非只靠靜態截圖的自動化場景
  • 已有 Gradle 工程,需要在會話內一鍵 build / install / launch 的團隊

使用注意

  • USB 真機幀率通常約 2–5 fps,模擬器約 5–10 fps;插件 README 在 Android 14 模擬器上實測常駐 screencap 循環約 8 fps。
  • android_shutdown 不能關閉實體手機;adb 無此能力,工具會如實說明。
  • 設備狀態爲 unauthorized 時,需在手機屏幕上確認 USB 調試授權;android_devices 會報告狀態而非隱藏設備。
  • 模擬器畫面全白/全黑但控件樹正常時,可能是 host-GPU framebuffer 讀回問題;可嘗試 emulator -avd <名稱> -gpu swiftshader_indirect 軟渲染重啓。
  • 流在消費者歸零約 5 分鐘後會因空閒策略停止,下次工具調用或打開面板時會重啓。

DSH 生態採用「一切皆插件」思路;SkillHub 是社區插件目錄,與 DeepSeek / 幻方無官方從屬關係。

鏈接

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜