🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

安卓投屏 ns-zzj/dsh-android-scrcpy

DeepSeek Harnessv1.0.1
ns-zzj33 天前有提交已提供中文文档扫描:含敏感能力

把安卓设备画面接进对话,可点按滑动与注入文字

30.6/100
综合分
1
GitHub 星标
88
npm 周下载
—/5
用户评分

数据截至 2026/10/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @nszzj/dsh-android-scrcpy
npm 源 · @nszzj/dsh-android-scrcpy 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · vision
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功(非静态推断);本次验证针对插件 v1.0.2,当前版本为 v1.0.1
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 33 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包@nszzj/dsh-android-scrcpy @ 1.0.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 16:18:28

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 12 处,展示前 12 条)
  • 读取本地文件
    lib/index.js:70
    const o = JSON.parse(readFileSync(CONFIG_FILE, 'utf8'))
  • 写入本地文件
    lib/index.js:97
    mkdirSync(CONFIG_DIR, { recursive: true })
  • 写入本地文件
    lib/index.js:98
    writeFileSync(CONFIG_FILE, JSON.stringify(cfg, null, 2), 'utf8')
  • 读取本地文件
    lib/index.js:117
    if (cfg.adbPath && existsSync(cfg.adbPath)) return { path: cfg.adbPath, source: 'config' }
  • 读取本地文件
    lib/index.js:118
    for (const c of adbCandidates()) if (existsSync(c)) return { path: c, source: 'candidate' }
  • 执行外部命令固定命令
    lib/index.js:120
    if (spawnSync('adb', ['version'], { stdio: 'ignore' }).status === 0) return { path: 'adb', source: 'PATH' }
  • 执行外部命令来自配置/变量
    lib/index.js:130
    execFile(bin, sn ? ['-s', sn].concat(args) : args, { maxBuffer: 16 * 1024 * 1024, windowsHide: true }, (err, stdout, stderr) => {
  • 执行外部命令来自配置/变量
    lib/index.js:142
    execFile(bin, ['version'], { windowsHide: true }, (err, stdout, stderr) => resolve({ err, stdout: String(stdout || ''), stderr: String(stderr || '') }
  • 写入本地文件
    lib/index.js:261
    appendFileSync(join(os.tmpdir(), 'dsh-scrcpy-ws.log'), line)
  • 执行外部命令来自配置/变量
    lib/index.js:539
    execFile(ADB, ['-s', sn].concat(args), { encoding: 'buffer', maxBuffer: 64 * 1024 * 1024, windowsHide: true }, (err, stdout, stderr) => {
  • 读取本地文件
    lib/index.js:666
    if (!existsSync(JAR_LOCAL)) return { ok: false, error: '包内资源缺失:' + JAR_LOCAL }
  • 执行外部命令来自配置/变量
    lib/index.js:706
    dev.serverProc = spawn(ADB, ['-s', sn, 'shell', cmd], { stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true })
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 多设备实时投屏
  • 鼠标点按滑动
  • 注入文字
展开完整介绍(186 字)↓

DSH 的安卓投屏 provider —— 通过 adb(USB 调试或已配对的无线调试)把安卓设备接进对话: 多设备实时投屏、鼠标点按滑动、返回/主页与音量电源按键、控件树读取、UHID 虚拟外接键盘(PC 键盘直接变设备键盘); AI 可以截图识别画面、读控件清单、按坐标点击与长按、注入文字。界面与 AI 工具在 dsh-scrcpy-core,两个平台可同时投屏。

1.0.22026-10-01
· 更新日志 — 修复改名后装不上(前后翻车三次) · 修复 · 第一次:装不上,报 failed to import:给包加 npm scope 时,包名、README、安装记录都改了, 唯独忘了 cordis.patch.yml 里硬编码的包名。加载器按旧名找不到包。 · 第二次:1.0.1 还是装不上:名字改对了,但 name: @nszzj/... 没加引号 —— YAML 里以 @ 开头的裸标量是非法字符, DSH 当场拒装(bad indentation of a mapping entry)。 · 第三次:1.0.2 装上了,但 DSH 起不来:client/client.js 里还硬编码着旧 id 'dsh-scrcpy-core', 客户端半区被加载两次 → duplicate factory registration → web boot 失败、应用打不开。 现在 id 已改,并加了一道幂等守卫(第二次执行直接跳过,不再重复注册)。 · 自我评价:三刀,一刀比一刀深 —— 先漏配置、再漏 YAML 语法、最后漏客户端入口, 全靠 DSH 的崩溃日志才把最后一处挖出来。作者是个傻逼,认了。 · 安装方式 在 DSH 的插件面板里装上: · core(必装):@nszzj/dsh-scrcpy-core@1.0.2 · 本包:@nszzj/dsh-android-scrcpy@1.0.2 或者下载下方的 Provider tgz包 和 Core tgz包。
1.0.02026-09-29
· 安装方式 在 DSH 的插件面板里装上: · core(必装):@nszzj/dsh-scrcpy-core · 本包:@nszzj/dsh-android-scrcpy 或者下载下方的 Provider tgz包 和 Core tgz包。 provider 单独装不会激活(设计如此,不是报错)。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-android-scrcpy DSH 的安卓投屏 provider —— 让 DSH 通过 adb 连上安卓设备:看画面、点/滑、按键、读控件树、给 AI 看。 界面、AI 工具、设备与焦点、路由、门槛全在 core 里;本包只负责"这台设备怎么连、怎么点、怎么出画面"。 这是什么 | 角色 | dsh-scrcpy 的 provider(安卓平台) | | 依赖 | 需要 dsh-scrcpy-core(不装它本包不激活)。本包不声明对 core 的包依赖 —— 两包自由装,互不自动拉取 | | 传输 | adb:USB 调试,或已配对的无线调试 | | 协议 | scrcpy-server 4.1 的 video + control 两路 socket;本 provider 在流路径里:自己解包、自己维护 GOP 缓存、自己把画面尺寸推给浏览器半区 | | sidecar 生命周期 | scrcpy-server.jar → adb push → 设备上 app_process 起进程 → adb forward 分配端口;就绪判据 = /proc/net/unix 里出现 @scrcpy | | 没有 | 浏览器半区、AI 工具、AI 提示词、UI 注册、焦点逻辑(都归 core) | 特点 | 特点 | 说明 |
展开完整文档(README 剩余 1 节)
dsh-android-scrcpy

DSH 的安卓投屏 provider —— 让 DSH 通过 adb 连上安卓设备:看画面、点/滑、按键、读控件树、给 AI 看。

界面、AI 工具、设备与焦点、路由、门槛全在 core 里;本包只负责"这台设备怎么连、怎么点、怎么出画面"。

这是什么

| 角色 | dsh-scrcpy 的 provider(安卓平台) |
| 依赖 | 需要 dsh-scrcpy-core(不装它本包不激活)。本包不声明对 core 的包依赖 —— 两包自由装,互不自动拉取 |
| 传输 | adb:USB 调试,或已配对的无线调试 |
| 协议 | scrcpy-server 4.1 的 video + control 两路 socket;本 provider 在流路径里:自己解包、自己维护 GOP 缓存、自己把画面尺寸推给浏览器半区 |
| sidecar 生命周期 | scrcpy-server.jar → adb push → 设备上 app_process 起进程 → adb forward 分配端口;就绪判据 = /proc/net/unix 里出现 @scrcpy |
| 没有 | 浏览器半区、AI 工具、AI 提示词、UI 注册、焦点逻辑(都归 core) |

特点

| 特点 | 说明 |
| 跨平台多设备 | 多台同时投屏,各自独立会话与独立标签页;安卓和鸿蒙可以同时显示,互不冲突。操作只作用于当前聚焦(面板可见)的那台,不会点错 |
| UHID 虚拟外接键盘 | PC 键盘直接变成设备的外接键盘(发的是真 HID 报告),不是"文本注入"那种替代方案 |
| 转屏 | 转屏后画面跟着走,不需要重连、不会黑屏(重建只由流里的 SPS 驱动,平台无关) |
| 切页 / 暂停 | 切走时自动暂停:不用常驻、也不用断开重连,暂停期间占资源很少;切回来立刻出画(provider 侧缓存"配置 + 最近关键帧起到现在的帧"并补发);暂停期间转过屏,切回来也不崩 |
| 画质 | 有线 / 无线分别配缩放与帧率;两端都能到原画,帧率 120 封顶 |
| AI 操作与权限 | 界面与全部 AI 工具在 core(截图识别 / 控件清单 / 点击 / 长按 / 按键 / 文字输入);权限四项各自"禁止使用 / 每次确认 / 无需确认"三态,后三项依赖截图,关掉时工具直接报原因、不反复重试 |
| 自由装卸 | provider 不含界面、不含 AI、不写提示词;装 core + 装对应平台的 provider 即可,两个 provider 各装各的、互不拉依赖 |

安装

在 DSH 的插件面板里装上两个包:

| 顺序 | 装什么 | 地址 |
| 1 | core —— 界面与 AI 工具都在这里 | @nszzj/dsh-scrcpy-core |
| 2 | 本包 @nszzj/dsh-android-scrcpy —— 安卓 provider | @nszzj/dsh-android-scrcpy |

- 两包各装一次,别只装 provider(core 缺了本包不会激活)
- 装完 完全退出 DSH 再打开(宿主半区改动只有重启才生效;浏览器半区刷新即可)
- 只装 provider 不装 core:本包因注入不满足而静默不激活(设计如此,不是 bug)

快速开始

1. 设备端打开 USB 调试,确认 adb devices 能看到它(无线调试同理)
2. DSH 顶部菜单 → 设备列表里出现这台设备(core 每 3 秒拉一次,本包只负责上报)
3. 「连接设置」里可以配:
- adb 路径(不在 PATH 时)
- 画面四件套:有线 1/2 · 60fps、无线 1/4 · 30fps(默认值;两端都能到"原画",帧率 120 封顶)

环境要求

- adb(按「连接设置里的路径 → 环境变量 → PATH」依次找)
- 一台安卓设备 + USB 调试(或已配对的无线调试)
- 不需要 Java —— scrcpy-server 由设备上的 app_process 直接跑

目录结构

lib/index.js provider 实现(3.0.0 形状:传输 / 发现 / 动作 / 环境检测 / 连接配置 + 画面四件套) resources/scrcpy-server-v4.1 scrcpy 项目自己的服务器文件,运行时 adb push 到设备 cordis.patch.yml DSH 插件清单 Dev/demo/ 独立测试件(不依赖 DSH,也不进 npm 包) Dev/doc.md 开发资料说明(含"基于 core 开发 provider"的链接)

已知限制

- 连接中途不能改缩放/帧率:两个平台都不支持中途换档,要换就断开重连(改设置只对下次连接生效)
- 首次连接/授权类弹窗要人在设备上点确认,provider 不能代劳
- 断流/切后台后的恢复依赖 GOP 补发;若设备端太久没出关键帧,恢复会慢一点

二次开发

- 本目录的开发资料(每个 demo 是干嘛的、怎么跑)→ Dev/doc.md
- 基于 core 开发一个 provider(契约、core 会调你的动作、文案与语言规则、坐标与画面尺寸的坑)→ core/Dev/doc.md
- 逐字段契约以 core 的 CONTRACT.md 为准

许可与第三方

- 本包:MIT
- 随包发布 resources/scrcpy-server-v4.1 —— 来自 Genymobile/scrcpy,Apache-2.0,版权 Copyright (C) 2018 Genymobile / Copyright (C) 2018-2026 Romain Vimont,原样分发、未修改。
出处、许可与完整许可文本见 THIRD_PARTY_NOTICES.md。
- Dev/demo/jmuxer.min.js(开发件,不随 npm 包发布,但随 Git 仓库分发)→ 声明在 Dev/demo/THIRD_PARTY_NOTICES.md
预览分享卡片长什么样 ↓ns-zzj/dsh-android-scrcpy
分享 · DeepSeek Harness Hub
ns-zzj/dsh-android-scrcpy

把安卓设备画面接进对话,可点按滑动与注入文字

这是你的仓库?认领条目

回到顶部