# 开发资料(本目录)
> **基于 core 开发 provider** → [core/Dev/doc.md](https://github.com/ns-zzj/dsh-scrcpy-core/blob/main/Dev/doc.md)
> (契约、core 会调你的动作、你要上报什么、文案与语言规则、画面四件套、坐标与画面尺寸的坑 —— 想给别的平台接一个 provider 就看那份。)
## 架构
```mermaid
flowchart TB
CL["DSH 网页(core 的浏览器半区)
菜单 · 每设备一张投屏标签页 · jmuxer 解码
触控 / 按键"]
CO["DSH Host(core 插件)
配置 · 环境检测 · 设备发现 · AI 工具与提示词
把动作路由给 provider"]
PR["鸿蒙 provider(本包)
只负责:起停 sidecar · 环境检测 · 连接配置 · 上报设备"]
SC["Java sidecar(每设备一个进程)
Main --sn SN · ws://127.0.0.1:port
H.264 帧广播 · 触控按键 · GOP 缓存补发"]
PH(("鸿蒙设备"))
CL <-->|"host.call · RPC"| CO
CO -->|"actions / handlers"| PR
PR -->|"spawn 拉起"| SC
SC <-->|hdc| PH
CL <==>|"WebSocket 直连(视频帧 / 触控 / 按键,不经 provider)"| SC
```
**关键点**:浏览器半区**直连 sidecar** 收发视频与触控,provider **不在流路径里** —— 它只负责把 sidecar 拉起来、报设备、报配置。
## 开发约定
- **sidecar 逻辑**改 `Dev/src/Main.java`;编译产物要同步到 `resources/out/`,**必须用 `--release 8`**(原版 class 目标是 Java 8,用新 JDK 默认编出 69/61 会让老 Java 起不来);命令见 `doc-sidecar.md`。
- **协议改动**要三处同步:`Dev/src/Main.java`(收发)、`Dev/demo/` 里的探针/测试页(验证)、以及 core 浏览器半区里对应那段(消费)。
- **改了 Java 必须重启用到它的进程**(demo 与插件都是启动时加载)。
- 改完 sidecar 要在 demo 里先独立验一遍,再在 DSH 里验,最后才重新打包。
## Dev/demo/ —— 独立测试件(不依赖 DSH,也不进 npm 包)
| 文件 | 干什么 | 怎么跑 |
|---|---|---|
| `browser-demo.mjs` | 起 sidecar + 递一个网页(jmuxer + `