使用 Electron 打造专属鸿蒙开发者调试助手(实战 + 源码)
最好的工具,是你为自己写的那个。我们不必等待官方提供所有功能。把繁琐的命令图形化把重复的操作自动化把复杂的流程可视化这不仅提升了开发效率,也锻炼了全栈能力。未来,或许你可以基于这个小工具,开发出一款“鸿蒙生态一体化开发平台”!
作者:L、218
发布平台:CSDN
关键词:鸿蒙开发、Electron、DevTools、调试工具、ArkTS、日志查看器、分布式调试、前端工程化
原创声明:本文为 CSDN 独家原创,转载请注明出处。
一、引言:为什么需要一个“鸿蒙调试助手”?
作为一名鸿蒙开发者,你是否遇到过这些问题?
hdc命令行太难记,每次都要查文档?- 多设备连接时分不清哪个是手机、哪个是手表?
- 分布式任务无法可视化监控?
- 日志太多,关键信息被淹没?
而 DevEco Studio 虽然功能强大,但启动慢、资源占用高。有没有一种轻量、快速、可定制的调试工具?
答案是:用 Electron 自己做一个!
本文将带你从零开始,使用 Electron + Node.js 构建一款 “鸿蒙开发者调试助手”,支持:
✅ 设备列表可视化
✅ 实时日志抓取
✅ 快捷命令执行(安装/卸载/重启)
✅ 自定义脚本扩展
🎯 适用人群:鸿蒙初学者 & 进阶开发者
二、技术选型与架构设计
| 技术 | 作用 |
|---|---|
| Electron | 构建桌面 GUI 应用 |
| Node.js 子进程(child_process) | 调用 hdc 命令行工具 |
| Tail & Grep 模拟 | 实时监听日志输出 |
| React/Vanilla JS | 渲染界面(本文使用原生 JS 简化) |
| JSON 配置文件 | 存储常用命令和设备别名 |
📁 项目结构如下:
harmony-debug-assistant/
├── main.js # Electron 主进程
├── preload.js # 安全预加载
├── renderer.js # 页面逻辑
├── index.html # UI 界面
├── assets/ # 图标等资源
├── config.json # 自定义命令配置
└── package.json
三、准备工作:确保 hdc 已安装并加入环境变量
鸿蒙设备调试依赖华为提供的 HDC(HarmonyOS Device Connector),类似于 Android 的 ADB。
步骤:
- 安装 DevEco Studio
- 找到
hdc路径(通常位于DevEco Studio\tools\hdc.exe) - 将路径添加到系统
PATH环境变量 - 终端输入
hdc version测试是否成功
✅ 输出示例:
HDC Version: 8.0.1.301
四、核心功能实现
功能1:获取已连接设备列表
main.js 中调用 hdc 命令
const { app, BrowserWindow, ipcMain } = require('electron')
const { exec } = require('child_process')
function getDevices(callback) {
exec('hdc list targets', (error, stdout, stderr) => {
if (error) {
callback([], error.message)
return
}
const lines = stdout.trim().split('\n').slice(1) // 跳过标题行
const devices = lines.map(line => {
const [id, type] = line.trim().split(/\s+/)
return { id, type: type || 'unknown' }
}).filter(d => d.id)
callback(devices)
})
}
ipcMain.handle('get-devices', (event) => {
return new Promise((resolve) => {
getDevices((devices, err) => {
resolve({ devices, error: err })
})
})
})
功能2:实时获取设备日志(logcat 类似)
let logProcess = null
ipcMain.on('start-logs', (event, deviceId) => {
if (logProcess) logProcess.kill()
logProcess = exec(`hdc -t ${deviceId} shell hilog`)
logProcess.stdout.on('data', (data) => {
event.sender.send('log-update', data.toString())
})
logProcess.stderr.on('data', (data) => {
event.sender.send('log-update', `[ERROR] ${data.toString()}`)
})
})
ipcMain.on('stop-logs', () => {
if (logProcess) {
logProcess.kill()
logProcess = null
}
})
功能3:执行快捷命令(安装 HAP 包)
ipcMain.handle('run-command', async (event, cmd, targetId) => {
const fullCmd = cmd.replace('{device}', targetId)
return new Promise((resolve) => {
exec(fullCmd, (err, stdout) => {
resolve({
success: !err,
output: stdout || err?.message,
command: fullCmd
})
})
})
})
五、前端界面搭建(index.html + renderer.js)
index.html 简化版 UI
renderer.js:前端交互逻辑
const deviceList = document.getElementById('deviceList')
const logArea = document.getElementById('logArea')
let selectedDevice = null
// 刷新设备列表
async function reconnect() {
const result = await window.electronAPI.getDevices()
deviceList.innerHTML = ''
if (result.error) {
deviceList.innerHTML = `<li style="color:red">${result.error}</li>`
return
}
result.devices.forEach(dev => {
const li = document.createElement('li')
li.textContent = `${dev.id} (${dev.type})`
li.onclick = () => {
document.querySelectorAll('.device-list li').forEach(el => el.classList.remove('selected'))
li.classList.add('selected')
selectedDevice = dev.id
}
deviceList.appendChild(li)
})
}
// 实时日志
function startLogs() {
if (!selectedDevice) {
alert('请先选择一个设备!')
return
}
logArea.textContent = '[正在监听日志...]'
window.electronAPI.startLogs(selectedDevice)
}
function stopLogs() {
window.electronAPI.stopLogs()
logArea.textContent += '\n[已停止监听]'
}
// 快捷命令
async function installApp() {
if (!selectedDevice) return
const res = await window.electronAPI.runCommand(`hdc -t {device} install -r ./app.hap`, selectedDevice)
alert(res.success ? '✅ 安装成功!' : '❌ 安装失败:' + res.output)
}
async function restartDevice() {
if (!selectedDevice) return
const res = await window.electronAPI.runCommand(`hdc -t {device} reboot`, selectedDevice)
alert(res.success ? '🔄 设备正在重启...' : '❌ 重启失败')
}
// 监听日志更新
window.electronAPI.onLogUpdate((log) => {
logArea.textContent += log
logArea.scrollTop = logArea.scrollHeight
})
// 初始化
reconnect()
setInterval(reconnect, 10000) // 每10秒自动刷新
🖼️ 效果截图建议
https://images.pexels.com/photos/3975548/pexels-photo-3975548.jpeg?auto=compress&cs=tinysrgb&w=600
(说明:此处替换为实际运行截图,展示设备列表与日志滚动效果)
🔔 提示:你可以打包成
.exe放在桌面,一键启动,比打开 DevEco Studio 快得多!
六、进阶功能建议(可拓展方向)
| 功能 | 实现思路 |
|---|---|
| 📁 HAP 文件拖拽安装 | 监听 dragover / drop 事件,获取文件路径后调用 hdc 安装 |
| 📊 分布式任务监控 | 解析 hdc shell "bm dump --bundle" 获取跨设备服务状态 |
| 💾 日志导出为文件 | 将日志内容保存为 .log 文件 |
| 🎨 主题切换 | 支持深色/浅色模式 |
| 🧩 插件系统 | 加载 plugins/*.js 实现自定义功能扩展 |
七、安全与权限提醒
⚠️ 使用注意:
hdc需要设备开启 **USB 调试模式**- 多设备连接时建议使用
-t <device-id>明确指定目标 - 不要在生产环境中暴露此工具给非开发者
- 建议对敏感命令进行二次确认
八、结语:做自己的开发者工具
“最好的工具,是你为自己写的那个。”
我们不必等待官方提供所有功能。通过 Electron,我们可以:
- 把繁琐的命令图形化
- 把重复的操作自动化
- 把复杂的流程可视化
这不仅提升了开发效率,也锻炼了全栈能力。
未来,或许你可以基于这个小工具,开发出一款 “鸿蒙生态一体化开发平台”!
九、源码获取
GitHub 仓库地址:
👉 https://github.com/l218/harmony-debug-assistant
包含:
- 完整项目代码
- 打包脚本(electron-builder)
- 示例 HAP 安装命令
- 配置模板
欢迎 Star ⭐ | Fork 🔁 | 提交 PR 🙌
十、参考资料
💬 互动时间:
- 你最希望调试工具增加什么功能?
- 你会自己写开发工具吗?
欢迎在评论区留言,一起打造国产开发者的极客生态!
✍️ 作者简介:L、218,前端工程师 & 鸿蒙爱好者,专注跨平台工具开发,致力于降低国产系统开发门槛。
✅ 原创声明:本文由 L、218 原创撰写,首发于 CSDN,未经授权不得转载。
#鸿蒙开发 #Electron #调试工具 #hdc #DevEco #前端 #TypeScript #Nodejs #开发者工具 #CSDN博客 #L218 #鸿蒙调试助手
更多推荐



所有评论(0)