DSH 插件:安卓真机镜像/控制/截图,下载即用
30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Lovepeace-art/dsh-android-phone该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 45 处,展示前 39 条)
- 读取本地文件index.js:181
try { raw = JSON.parse(readFileSync(settingsFile(), "utf8")) || {}; } catch { raw = {}; } - 写入本地文件index.js:194
mkdirSync(dirname(settingsFile()), { recursive: true }); - 写入本地文件index.js:195
writeFileSync(settingsFile(), JSON.stringify(norm, null, 2) + "\n", "utf8"); - 读取本地文件index.js:214
if (!existsSync(dir)) return { removed: 0, kept: 0, dir, days }; - 读取本地文件index.js:219
try { ents = readdirSync(d, { withFileTypes: true }); } catch { return; } - 读取本地文件index.js:226
let st; try { st = statSync(p); } catch { continue; } - 删除本地文件index.js:228
try { rmSync(p, { force: true }); removed += 1; bytes += st.size; } catch { kept += 1; } - 读取本地文件index.js:246
try { ents = readdirSync(root, { withFileTypes: true }); } catch { return { dir: root, skills: [] }; } - 读取本地文件index.js:250
if (!existsSync(md)) continue; - 执行外部命令固定命令index.js:266
const p = spawnProcess("explorer.exe", [dir], { detached: true, stdio: "ignore" }); - 写入本地文件index.js:383
mkdirSync(dir, { recursive: true }); - 写入本地文件index.js:394
mkdirSync(dir, { recursive: true }); - 删除本地文件index.js:1393
if (p.startsWith(dir) && / png$/i.test(p)) rmSync(p, { force: true }); - 发起网络请求client.js:402
const r = await fetch(`${base}/snapshot?scale=0.5`, { cache: 'no-store', signal: ac.signal }); - 发起网络请求client.js:421
const res = await fetch(`${base}/video?maxSize=${effMax}&maxFps=${quality.maxFps}&bitRate=${effBit}`, { signal: ac.signal, cache: 'no-store' }); - 发起网络请求client.js:642
const r = await fetch(`${api.base}/action`, { - 发起网络请求client.js:853
const r = await fetch(`${apiBase(ctx)}/settings`, { - 发起网络请求client.js:971
const r = await fetch(`${api.base}${path}`, { cache: 'no-store', ...(init || {}) }); - 发起网络请求client.js:1666
const r = await fetch(`${base}${path}`, { - 读取本地文件src/android/adb.js:38
if (!existsSync(root)) continue; - 读取本地文件src/android/adb.js:41
entries = readdirSync(root, { withFileTypes: true }); - 读取本地文件src/android/adb.js:48
if (existsSync(flat)) { - 读取本地文件src/android/adb.js:56
inner = readdirSync(mid, { withFileTypes: true }); - 读取本地文件src/android/adb.js:63
if (existsSync(nested)) found.push({ tag: i2.name, p: nested }); - 读取本地文件src/android/adb.js:97
if (existsSync(c)) return c; - 执行外部命令来自配置/变量src/android/adb.js:150
child = spawn(exe, ['-L', `tcp:${port}`, 'nodaemon', 'server'], { windowsHide: true, stdio: 'ignore' }); - 执行外部命令来自配置/变量src/android/adb.js:178
child = spawn(exe, full, { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }); - 读取本地文件src/android/video.js:68
try { if (c && existsSync(c)) return c; } catch { } - 读取本地文件src/android/video.js:82
try { entries = readdirSync(root); } catch { continue; } - 读取本地文件src/android/video.js:88
for (const sub of readdirSync(p)) { - 读取本地文件src/android/video.js:111
const size = statSync(src).size; - 执行外部命令来自配置/变量src/android/video.js:222
spawnSync(adbPath || resolveAdb() || 'adb', args, { stdio: 'ignore', timeout: timeoutMs, windowsHide: true }); - 执行外部命令来自配置/变量src/android/video.js:244
const r = spawnSync(bin, [...serialArgs, 'reverse', '--list'], { encoding: 'utf8', timeout: timeoutMs, windowsHide: true }); - 执行外部命令来自配置/变量src/android/video.js:252
const d = spawnSync(bin, [...serialArgs, 'reverse', '--remove', spec], { stdio: 'ignore', timeout: timeoutMs, windowsHide: true }); - 执行外部命令来自配置/变量src/android/video.js:344
const child = spawn(adbPath, ['-s', String(serial), ...serverArgs], { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }); - 读取本地文件src/core/attach.js:79
const data = await readFile(p); - 读取本地文件src/core/attach.js:84
const size = pngSize(await readFile(filePath)); - 执行外部命令来自配置/变量src/android/touchWatch.js:69
try { p = spawn(adb, args, { windowsHide: true }); } catch { resolve(''); return; } - 执行外部命令来自配置/变量src/android/touchWatch.js:111
child = spawn(adb, ['-s', String(serial), 'shell', `getevent -lt ${device}`], { windowsHide: true });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-android-phone
把安卓真机搬进 DeepSeek Harness 的侧栏
中文 · English
能力
- 手机画面实时显示在 DSH 原生右侧栏里;同一套能力也交给模型,AI 可操作手机
- 亚毫秒控制:支持点按、长按、拖拽、滚轮、双指缩放、PC 键盘直通
- 支持截屏 / 长截图
- 同一套能力作为工具交给模型 ——「AI 自动操作手机」和「用户手机画面展示」共用同一条链路、同一个会话
- (尚在构思中)agent 自动操作手机,打通 IM-PC-PHONE 工作流
环境要求
| 需要 | 说明 |
| Windows 10/11 | 当前仅支持windows |
| DSH | desktop profile,>= 0.2.0-rc.2 |
| Node | ≥ 20(插件运行时零 npm 依赖:adb 走命令行,PNG 编解码用自带 src/core/png.js) |
| 安卓手机 | 「开发者选项 → USB 调试」打开,插 USB,弹窗点「一律允许」; USB 模式任选 |
| 不需要 | dsh-better-sidebar —— 侧栏面板是 DSH 原生右侧栏功能,与它无关,也不需要安装它 |
安装
用 DSH 官方的安装入口,不需要跑脚本:
1. DSH → 设置 → 插件 → 添加插件
展开完整文档(README 剩余 1 节)
dsh-android-phone 把安卓真机搬进 DeepSeek Harness 的侧栏 中文 · English 能力 - 手机画面实时显示在 DSH 原生右侧栏里;同一套能力也交给模型,AI 可操作手机 - 亚毫秒控制:支持点按、长按、拖拽、滚轮、双指缩放、PC 键盘直通 - 支持截屏 / 长截图 - 同一套能力作为工具交给模型 ——「AI 自动操作手机」和「用户手机画面展示」共用同一条链路、同一个会话 - (尚在构思中)agent 自动操作手机,打通 IM-PC-PHONE 工作流 环境要求 | 需要 | 说明 | | Windows 10/11 | 当前仅支持windows | | DSH | desktop profile,>= 0.2.0-rc.2 | | Node | ≥ 20(插件运行时零 npm 依赖:adb 走命令行,PNG 编解码用自带 src/core/png.js) | | 安卓手机 | 「开发者选项 → USB 调试」打开,插 USB,弹窗点「一律允许」; USB 模式任选 | | 不需要 | dsh-better-sidebar —— 侧栏面板是 DSH 原生右侧栏功能,与它无关,也不需要安装它 | 安装 用 DSH 官方的安装入口,不需要跑脚本: 1. DSH → 设置 → 插件 → 添加插件 2. 填本地绝对路径(插件目录,例如 C:\Tools\dsh-android-phone);仓库 public 之后也可以填 Git 地址 3. 安装(DSH 用自带 pnpm 完成依赖与注册) 4. 重启 DSH 装完插件会出现在 DSH 的「插件」页(可在这里开关与配置);右侧栏里也会多出「📱 手机」页签 —— 打开方式是 DSH 右侧栏自己的开关按钮 → 引导胶囊里选「📱 手机」。 目前没有发布到 npm,所以「填包名」那条路暂时走不通 —— 用本地路径或 Git 地址。 安装细节与卸载见 使用说明 · 安装与卸载。 让 agent 帮你装 把插件目录的绝对路径给模型,附一句: 装上 DSH 插件 dsh-android-phone(目录 <绝对路径>):跑 dsh plugin --profile <我的 profile> add "link:<绝对路径>" (dsh 不在 PATH 时用 <DSH 安装目录>\resources\runtime\cli\bin\dsh.cmd),装完跑 node scripts/doctor.mjs 要 10/10 全绿,再重启 DSH。 不要改仓库里的代码。 工作原理 ┌─ DSH 宿主进程(Node) ─────────────────┐ │ session.js 单会话管理 / 自愈 / 控制权 │ ┌─ 手机 ─┐ │ video.js adb reverse + 帧解析 │ ───► │scrcpy- │ │ control.js 控制消息编码 │ ◄─── │server │ │ longshot.js 逐帧拼接 │ └────────┘ │ index.js 12 工具 + 19 HTTP 路由 │ └───────────────┬────────────────────────┘ │ HTTP(视频流 + 控制) ┌───────────────▼────────────────────────┐ │ DSH 侧栏(浏览器) │ │ client.js WebCodecs 解码 → canvas 上屏 │ └────────────────────────────────────────┘ 文档 | 文档 | 内容 | | 使用说明 | 安装与卸载细节、侧栏手势、清晰度、设置页、打开 App、会话与控制权 | | 工具与接口 | 12 个 phone_* 工具、动作语义、19 个 HTTP 接口 | | 工作原理 | 三条链路、坐标空间、五条关键设计、性能数字 | | 排障 | 自检、adb 查找顺序、常见问题、清残留 | 开发 开发约定(硬约定、常见陷阱、改完要检查什么)集中在 AGENTS.md;协作流程见 CONTRIBUTING.md。 已知限制 - 仅 Windows - 中文输入走控制通道直接送 UTF-8(≤300 字节自动分段);只有 adb 兜底路径只支持 ASCII - 静止画面出帧率低(5~6fps):scrcpy 虚拟显示只在内容变化时出帧,属正常现象 - 长截图对无限流 / 懒加载 / 倒计时页面可能有少量错位 - 部分机型 input swipe 会触发系统手势(控制通道路径不受影响) 免责声明 - 若你认为本仓库某处内容侵犯了你的权利,请在本仓库开 Issue 说明,核实后我会立即删除或替换相应内容。 参与贡献 欢迎 Issue 与 PR。提 PR 前请跑一遍 npm run ci,并按 PR 模板填写测试情况(UI 改动附截图、协议层改动注明依据)。详细流程与代码约定见 CONTRIBUTING.md。 本项目未使用 CLA:按 Apache-2.0 提交 PR 即视为同意以同一许可证授权你的贡献。 许可与致谢 本项目代码以 Apache License 2.0 授权,全文见 LICENSE,第三方组件声明见 NOTICE。 - scrcpy(Apache-2.0)—— vendor/scrcpy-server 原样分发;视频流协议与控制通道依据其公开源码独立实现 - QtScrcpy(Apache-2.0)—— 产品交互形态参考,未复制其代码 - Android SDK Platform-Tools(Google)—— vendor/platform-tools/ 原样分发,仅作运行依赖 - 长截图拼接思路参考 SnowShot(逐帧采集 + 运动估计 + 增量拼接 + 置信度拒帧),纯 JS 实现,不依赖 OpenCV
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Lovepeace-art/dsh-android-phone
DSH 插件:安卓真机镜像/控制/截图,下载即用
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,269已汉化DSH
70.8
这是你的仓库?认领条目