做移动端开发时,一次排查经常要打开好几个工具:终端里查进程和日志,另开窗口投屏,再配置代理和证书抓包,文件与安装包还要靠命令来回传。切换本身不难,麻烦的是这些操作每天都要重复。
我们最近开源了 Hadice,一款由货拉拉内部开发经验沉淀而来的 Android 与 HarmonyOS 桌面调试工具。它把设备信息、性能监控、应用安装、文件互传、投屏录屏、系统日志和网络抓包放进了同一个桌面工作台。
项目使用 Wails v3、Go 和 React 开发,采用 Apache License 2.0 开源。目前提供 macOS 与 Windows* 版本。
Hadice官网 | 下载地址 | 使用文档 | Github

起源与发展
Hadice 最初只想解决鸿蒙开发中的两个问题:没有趁手的投屏工具,也缺少一套方便日常使用的抓包方案。
Hadice的名字也是来源于鸿蒙连接工具HDC (Harmony device connector).
很多调试动作都有命令可用,但"有命令"和"用起来顺手"是两回事。查看请求详情、对照设备画面、过滤日志、编辑 Mock 规则,这些操作放在桌面端完成更合适。于是我们先通过 HDC 把设备能力接到电脑上,逐步补齐投屏、抓包、截图录屏、应用管理和文件传输。
后来,团队在 Android 开发中遇到的需求高度相似。我们没有再做一套独立工具,而是在原来的桌面工作台中增加 ADB、scrcpy、JVMTI Agent 和 WebView CDP 等 Android 实现。Hadice 也由此从鸿蒙调试工具变成了 Android 与 HarmonyOS 共用的调试工具。
常用功能
连接手机并完成调试授权后,Hadice 会识别设备平台,并提供对应能力。我们目前最常用的是下面几组功能。
- 无感抓包:不修改手机系统代理,也不要求安装抓包 CA 证书,可查看 HTTPS 明文请求与响应,并提供搜索、详情查看、Mock* 和导出。
- 投屏、截图与录屏:在电脑上查看并操作设备画面,截取图片、录制视频,结果集中保存在历史列表中。
- 快速安装:拖入或选择 APK、HAP,省去手动输入安装命令和路径。
- 文件互传:浏览设备目录,在手机与电脑之间双向传输文件,批量任务进入传输队列。
- 日志与性能:查看并过滤 logcat、hilog,同时观察 CPU、内存、网络和帧率等指标。
- 设备与应用管理:查看设备、进程和应用信息,启动、停止、卸载应用或清理应用数据。
- 更多功能等待你的探索

每个功能页都可以拆成独立窗口。排查一个复杂问题时,可以把投屏、抓包、日志和性能监控同时放在桌面上,不必在侧边栏反复切换。

统一界面与不同平台实现
Android 和 HarmonyOS 都能安装应用、读取日志、截屏和传文件,但底层命令、系统服务与返回格式并不相同。如果把平台判断散落在每个 React 页面里,功能越多,两套实现越容易分叉。
Hadice 把界面和平台实现分开。React 页面调用 Wails 生成的 TypeScript Binding,Go 后端根据当前设备选择 Android 或 HarmonyOS Provider,再执行 ADB、HDC 或对应的设备侧服务。命令结果会在后端解析成统一结构,日志、视频帧、性能指标和网络请求等持续数据则通过 Wails Event 推送到前端。
以截图为例,同一个界面操作会进入不同链路:
perl
HarmonyOS:React → Wails → Go → hdc shell snapshot_display → hdc file recv
Android: React → Wails → Go → adb shell screencap → adb pull
这种分层没有强行抹平平台差异。平台专属能力仍留在各自实现中,用户能共用的交互和数据结构才放到上层。
Android抓包:JVMTI Agent 与 WebView CDP
Android 应用的请求可能来自 OkHttp、Cronet、也可能来自 WebView。Hadice 同时使用两条采集链路:
- 原生网络栈由 C++ JVMTI Agent 附加到目标进程,采集 OkHttp、Cronet 请求。
- WebView 通过 Chromium DevTools Protocol 连接调试目标,使用 Network 域采集请求,并通过 Fetch 域完成 Replace Mock。
采集结果经 TCP 与 adb reverse 回到 Go 后端,最终汇总到同一张请求列表中。开发者不需要先判断请求走了哪个网络栈,在请求详情里仍能看到具体来源。
限制:Android 端目前面向 debuggable 应用,支持 OkHttp 3、org.chromium.net Cronet,以及已开启调试能力的 Android WebView。它是开发阶段的调试能力,不是面向任意应用的系统级抓包器。
投屏
Hadice 的 Android 投屏基于 scrcpy。设备端输出 H.264 视频流,Go 后端处理连接和帧数据,前端使用 WebCodecs 解码到 Canvas。鼠标或触摸操作会换算成设备坐标,再通过控制通道发回手机。
HarmonyOS 没有直接照搬 Android 链路。Hadice 通过屏幕扩展获取 H.264 帧,并建立独立的手势通道;Go 后端把 Annex B 数据转换为前端解码需要的格式,再沿用统一的帧事件交给 WebCodecs。若 H.264 链路无法启动,会回退到JPEG 帧方案,保证不同设备环境下仍有可用路径。
截图和录屏则调用各平台的系统能力。它们和实时投屏共用一个页面,但后端分别管理进程、临时文件、停止信号与结果回传.
关于 Wails
不同于Electron, Wails 框架最主要的优势是包体积, 由于不内置chromium内核, 体积可以做到非常小; 其次需要长期管理命令进程、TCP 与 gRPC 连接、端口转发、文件流和设备会话,Go 适合处理这些任务。桌面端又有大量表格、实时图表、终端和多窗口交互,React 生态能减少界面层的重复投入。
下载体验
Hadice 当前提供 macOS 与 Windows 安装包。开启手机开发者模式和 USB 调试,连接电脑并确认授权后,就可以刷新设备开始使用。也可以配置无线调试连接。
macOS 安装包目前未签名。若首次启动提示"无法打开"或"已损坏",请按照下载页说明移除隔离属性。Windows 遇到 SmartScreen 提示时,可在确认安装包来源后选择继续运行。
Hadice官网 | 下载地址 | 使用文档 | Github
Hadice 仍会继续补充设备和系统版本适配,也需要更多真实开发环境来验证边界。如果你正在做 Android 或 HarmonyOS 开发,欢迎下载试用;遇到问题可以提交 Issue。如果它能帮上你的忙,也欢迎在 GitHub 点一个 Star。