很多公司做鸿蒙 / OpenHarmony 真机验证时,设备并不是「人手一台、随时插在开发者电脑上」:
结果是:设备在机房里是「有的」,但对日常开发来说常常「够不着」。常见权宜之计也各有问题:
hdc,把机房里的设备安全地接到办公网或指定环境更现实的目标通常是:
hdc tconn / hdc -t host:port ... 做 shell、传文件、装包、抓 hilog 等于是做了 hdc-remote-kit:部署在插着 USB 设备的那台机器(常见就是机房调试机)上,自动发现在线设备并分配稳定代理端口;客户端继续走标准 HDC,不引入私有协议,也尽量不改变现有 hdc 使用习惯。
hdc tconn <host>:<port>
hdc -t <host>:<port> shell echo ok
| 项目 | yabi-zzh/hdc-remote-kit |
| 版本 | v0.1.0 |
| 预编译包 | GitHub Releases(Linux / macOS / Windows,amd64 与 arm64) |
欢迎试用;觉得有用的话,给仓库点个 Star,也方便我们按反馈排优先级。当前为 v0.1.0 首版,能力与稳定性仍在迭代,文末有简要说明。
hdc-remote-kit 是纯 Go、无第三方依赖的 HDC 远程调试服务:把本机 USB 设备的调试能力,以标准 HDC daemon 入口的形式暴露到网络上。无 Web 控制面,无需手工登记设备。
主要特点:
hdc tconn / hdc -t host:port ...,现有脚本与工具链改动小服务启动后,日志会打印可直接复制的连接命令:
INFO forwarding ready serial=4ABVB24A10014201 connect="hdc tconn 192.168.1.8:50000"
边界也说清楚:这不是带控制台的设备管理平台,也不另起私有调试协议;目标是远程可连、尽量接近本地 hdc,并保持实现轻量。
┌────────────┐ USB ┌──────────────────────────────────────────┐
│ 鸿蒙 / OH │<------------>│ 调试机(机房 / 统一管理节点) │
│ 真机设备 │ │ hdc server (如 127.0.0.1:8710) │
└────────────┘ │ ▲ │
│ │ host channel │
│ ▼ │
│ hdc-remote-kit │
│ · 扫设备 / 维护 Binding + Lease │
│ · 每台 USB → 稳定 TCP 代理端口 │
│ · CIDR 准入 · 策略 · 审计 · 协议桥 │
│ ▲ │
└──────────┼───────────────────────────────┘
│ 局域网 / 公网 / VPN
│ hdc tconn host:port
┌──────────┴───────────────────────────────┐
│ 开发机 / CI / 远程客户端 │
│ 标准 hdc 命令与工具链 │
└──────────────────────────────────────────┘
启动 hdc-remote
│
▼
┌────────────────────────────────────────┐
│ 周期性扫描主 HDC 设备列表 │
│ (host channel,不调用外部 hdc CLI) │
└────────────────────┬───────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
online offline stale
│ │ │
▼ ▼ ▼
分配/复用端口 冻结入口 按策略处理
开启 Lease 停掉转发
打印 connect=
│
▼
客户端 hdc tconn host:port
│
▼
CIDR / 并发 / channel 上限校验
│
▼
daemon 握手 → 协议桥(shell / 文件 / 转发 / 安装 / hilog …)
│
▼
命令策略检查 → 通过则桥接;拒绝则 fail-closed 并写审计
hdc 客户端 hdc-remote 代理 主 HDC / 设备
│ │ │
│ TCP 连 host:port │ │
├─────────────────► │ CIDR/连接数检查 │
│ ├─────────────────────► │
│ 握手/keepalive │ 打开 target │
│◄────────────────► │◄────────────────────► │
│ shell/file/fport │ 协议桥分流 │
├─────────────────► ├─────────────────────► │
│◄───────────────── │◄───────────────────── │
服务通过 HDC host channel 协议直接读 USB / TCP target 列表,不在外再包一层 hdc CLI。
online / offline / stale
2s / 10s)插拔设备后,日志会跟着变;多设备场景靠 serial 一眼区分。
这是「远程调试好不好用」的关键体验点:
| 概念 | 含义 |
|---|---|
| Binding | 设备 ↔ 稳定端口的持久映射,主/备 JSON 快照落盘,重启可恢复映射关系 |
| Lease | 当前进程内的转发租约与活跃连接;不跨进程硬恢复,重启后按当时在线设备重新开启 |
50000–50500
8h(运行期持续刷新;异常停止刷新后到期自动关入口)connect="hdc tconn ...";客户端连上后再打 connection accepted
监听默认 0.0.0.0。能不能连上,看白名单,不看「是不是局域网」——局域网默认就能用;公网只要网络打通并放行来源,同样可以。
| 场景 | 做法 |
|---|---|
| 本机 / 公司局域网 | 默认即可(loopback + 10/8、172.16/12、192.168/16) |
| 指定办公网段 | 设置 HDC_REMOTE_ALLOWED_SOURCE_CIDRS
|
| 公网 / 跨公网 VPN | 把客户端出口 IP/网段写入白名单;HDC_REMOTE_PUBLIC_HOST 设为公网 IP 或域名,让日志里的连接命令可复制;防火墙只开代理端口 |
export HDC_REMOTE_PUBLIC_HOST=debug.example.com
export HDC_REMOTE_ALLOWED_SOURCE_CIDRS=127.0.0.1/32,::1/128,203.0.113.10/32
./hdc-remote
# 客户端:hdc tconn debug.example.com:50000
说明:公网可用,但会把设备调试面暴露到网络;请收紧 CIDR,并配合防火墙。不建议对全网 0.0.0.0/0 开放。
hdc tconn 建立的是标准 HDC daemon TCP 会话:
hdc -t host:port shell echo ok
远程侧体验尽量贴近「设备插在本机」。
独立 target channel 流式转发(超时默认 30m):
| 能力 | 用途 |
|---|---|
hilog |
抓日志 |
jpid |
JDWP 进程列表 |
track-jpid |
JDWP 进程跟踪 |
bugreport |
导出 bugreport |
file send / file recv
2 GiB,临时空间默认 4 GiB,超时默认 10m
fport / rport
tcp、localabstract、localreserved、localfilesystem
适合把设备侧服务映射到客户端可达的端口,做联调或自动化。
install / uninstall 经 App 协议桥到设备握手前三道闸:
2)64)命令策略 HDC_REMOTE_POLICY_PROFILE:
| 档位 | 行为 |
|---|---|
studio-debug(默认) |
拦已知高危,放行常规调试 |
restricted |
额外禁网络下载 / 外连类工具等 |
还可用 HDC_REMOTE_EXTRA_DENIED_EXECUTABLES 追加禁止的 shell 可执行名(只能加严)。
重启、刷写、root/runmode、改 HDC daemon 状态等会 fail-closed。注意:策略是尽力而为黑名单,不是完备沙箱,不能代替网络安全。
决策写入 STATE_DIR/audit.jsonl(默认 ./data/audit.jsonl),不含文件内容与完整命令行,便于事后核对「谁在什么时候被放行/拒绝」。
./hdc-remote -v
./hdc-remote -log-level=debug
debug 下可看到:设备扫描、租约续期、主 HDC dial/open target、daemon 帧路由(命令名/channel)、握手与 shell 打开等。连不上时先看是否被 CIDR 挡住、端口是否通、日志里的 serial / connect 是否抄对。
设 HOST:PORT 来自日志中的 connect=:
hdc tconn HOST:PORT
hdc -t HOST:PORT shell
hdc -t HOST:PORT shell echo ok
hdc -t HOST:PORT file send ./local.txt /data/local/tmp/local.txt
hdc -t HOST:PORT file recv /data/local/tmp/local.txt ./local.txt
hdc -t HOST:PORT install ./app.hap
hdc -t HOST:PORT uninstall <bundleName>
hdc -t HOST:PORT hilog
hdc -t HOST:PORT fport tcp:8080 tcp:8080
子命令以本机 hdc 为准;服务端按协议桥转发,未实现能力会返回明确失败信息。
服务端(插 USB 的机器)
# 本机 hdc server 已运行,且至少一台 USB 在线
go run ./cmd/hdc-remote
# 或下载 Release 对应平台二进制直接运行
客户端(任意能访问代理端口的机器)
hdc tconn <日志中的 host:port>
hdc -t <host:port> shell echo ok
常用环境变量:
| 变量 | 默认 | 作用 |
|---|---|---|
HDC_REMOTE_HDC_ADDR |
127.0.0.1:8710 |
主 HDC server |
HDC_REMOTE_PROXY_PORT_MIN / MAX
|
50000 / 50500
|
代理端口范围 |
HDC_REMOTE_PUBLIC_HOST |
自动探测(优先私网) | 日志展示的连接主机 |
HDC_REMOTE_ALLOWED_SOURCE_CIDRS |
loopback + 私网 | 来源白名单 |
HDC_REMOTE_POLICY_PROFILE |
studio-debug |
命令策略档位 |
HDC_REMOTE_MAX_CONNECTIONS |
2 |
单设备并发连接上限 |
完整配置表见仓库 README。
当前是第一个公开发布版本,日常路径(自动发现、hdc tconn、shell、文件收发、安装卸载、hilog、端口转发等)已能跑通,但仍请按「早期版本」预期使用:
欢迎把复现步骤、日志和期望行为反馈回来,后续版本会按真实使用优先修。
项目地址:https://github.com/yabi-zzh/hdc-remote-kit
欢迎试用。遇到异常、兼容问题,或希望补齐某条能力,可提 Issue / PR(尽量带上 hdc 版本、机型与日志),也可以直接在本帖留言。若觉得有用,欢迎点个 Star。