简介:鸿蒙HDC工具包是面向鸿蒙应用开发者的命令行工具集合,功能类似Android平台的adb,用于连接、调试和管理鸿蒙终端设备。资源共30个文件,压缩包大小14.08MB,主要包含8个exe可执行程序、14个json配置、3个jar工具以及pem/p12证书文件,覆盖设备交互、应用签名、反编译、资源配置和接口定义等环节。其中hdc.exe与hdc_std.exe承担设备管理核心能力,可执行应用安装卸载、查看系统信息等操作;反汇编工具辅助处理编译产物,idl.exe用于生成通信接口,syscap_tool.exe监控系统性能,配套的JSON与证书文件支撑应用打包调试。借助这套工具,开发者能高效完成鸿蒙应用的开发、测试与调试,充分利用分布式能力构建跨设备无缝协同体验。资源已有3897人学习下载,适合鸿蒙开发入门及进阶技术人员使用。
1. 为什么我建议你先把鸿蒙hdc工具包装上:一句话讲透它解决什么问题
如果你手头有鸿蒙系统的手机、平板或开发板,想装应用、抓日志、传文件,却还在靠第三方工具或设备上点来点去,那这套鸿蒙hdc工具包就是你要找的“命令行遥控器”。hdc 是鸿蒙系统向开发者开放设备能力的关键入口,通俗点说,它把设备端的操作暴露成了一堆可脚本化的命令,作用类似安卓生态里的 adb,但权限模型、连接方式和部分命令细节并不一样,不能拿 adb 的肌肉记忆硬套。它解决从“设备连不上电脑”到“批量安装、自动抓日志”的完整链路,适合应用开发、测试、系统定制和刷机爱好者,新手能跟上步骤,熟手也能参考参数边界。
2. 鸿蒙hdc工具包拆解:目录结构、版本选择与运行原理
2.1 hdc 在鸿蒙生态里的定位:不只是“鸿蒙版 adb”
很多人看到 hdc 的第一反应是“这不就是鸿蒙版 adb 吗”,实际用起来会发现差异比想象大得多。hdc 是客户端-服务端-设备端三段式结构:你在电脑上敲命令,电脑上先启动一个 hdc server 做连接管理和命令转发,server 再通过 USB 或网络把请求送到设备上的守护进程,由守护进程真正执行。三段式的好处是电脑可以同时管理多台设备,不用每敲一条命令都重新建立物理连接;坏处是 server 一旦卡死或端口被占用,所有设备都会一起失联,这类问题排查起来最耗时间,我习惯把它放在第一批检查项里。
和 adb 相比,hdc 的命令集更贴近鸿蒙应用模型。比如安装对象是 hap 包,日志系统是 hilog 而不是 logcat,设备节点和权限模型也要配合签名认证。直接套用 adb 的思路,很容易出现“命令确实发到设备了,但设备侧拒绝执行”的情况。所以第一次使用前,最好是先把工具包里的命令文档过一遍,而不是凭老经验猜。
下面这张表能帮你快速建立定位认知:
| 对比项 | hdc | adb |
|---|---|---|
| 面向系统 | 鸿蒙系设备 | 安卓系设备 |
| 安装文件类型 | hap | apk |
| 日志抓取 | hilog 体系 | logcat 体系 |
| 连接方式 | USB、网络、模拟器 | USB、网络、模拟器 |
| 命令风格 | 部分子命令带-t指定设备 | 带-s指定设备 |
这张表不是要说明谁替代谁,而是提醒你:换到 hdc 环境后,第一优先做的是确认命令存在,再考虑参数差异。工具包里的可执行文件版本不同,子命令也会有小幅增减,但上面这套主结构是稳定的。
2.2 工具包到底包含什么:可执行文件、驱动与文档清单
下载回来的鸿蒙hdc工具包,解压后典型结构大概是下面这样。拿到手先按这个清单核对,缺了哪个,后面的排错方向会不一样。
| 目录或文件 | 典型作用 | 使用时机 |
|---|---|---|
| hdc 可执行文件 | 电脑侧的命令入口 | 所有操作都离不开 |
| driver 目录 | 设备驱动或安装说明 | 电脑第一次连设备、设备不识别时 |
| README 或 docs | 命令帮助、错误码对照 | 查参数和排错 |
| 环境配置脚本 | 自动把 hdc 目录加入 PATH | 刚解压准备开始用时 |
| 示例脚本 | 一键抓日志、批量安装 | 日常自动化场景直接改 |
我一般会把可执行文件先复制到D:\tools\hdc这类不含中文和空格的固定目录里,然后再设置 PATH。这里有两个细节:一是路径里尽量不要有空格,之前我见过同事把 hdc 放在“Program Files”下,命令敲对了,解析路径时还是翻车,属于很玄学的坑;二是驱动目录别删,后续换设备或者系统重装后,驱动安装好就能直接再跑起来。
文档部分不要只看标题,重点找两个内容:命令参数速查表和常见错误码表。错误码表的帮助比搜索引擎大,比如安装失败返回的常见错误码,一般在文档里能直接查到原因。这也是工具包比单独下载一个二进制更值钱的地方,资料是配套的,不需要再去拼凑。
2.3 版本怎么选:SDK 版本、系统版本与 hdc 的对应关系
hdc 版本不是越新越好,关键是和设备侧的系统版本对齐。设备端守护进程有自己的协议版本,电脑侧 hdc 通过握手确认双方能力,如果版本差得远,最常见的表现是:设备列表能看到设备,但一执行命令就报错,或者连接后立刻断开。
我一般会先做三件事。第一,运行hdc version查看电脑侧工具版本;第二,在设备设置里看系统版本号;第三,如果是做应用开发,确认开发环境自带的 IDE 或 SDK 版本。三者尽可能保持同一个发布周期。老设备不要强行配新工具,新设备也别坚守老工具,别问为什么,踩一次就明白了。
如果你下载的工具包是某教程或某实验室整理好的,里面通常会注明适配范围。没有注明的话,就用最保守的策略:先不替换工具包自带的 hdc,把设备连上跑一遍hdc list targets,通过再继续;如果失败,再把工具包里的备用版本逐个换上去试。版本选择这块没有捷径,宁可多花十分钟做兼容性验证,也别在主流程中边做边换,那样最容易把问题边界搞混。
3. 把 hdc 跑起来:环境配置、设备连接与基础命令实战
3.1 配置环境变量与驱动:三步让电脑识别鸿蒙设备
拿到工具包后的第一个目标是让电脑执行hdc version不报“command not found”。我按三步走,每一步都顺手验证一下,避免问题积到最后。
第一步,解压。把工具包放到固定目录,比如$HOME/tools/hdc或D:\tools\hdc,不要放在临时下载目录里。临时目录看起来没影响,但后续写脚本、配置别名时路径老变,很容易出低级错误。
第二步,设置 PATH。以 bash 环境为例:
# 把 hdc 所在目录追加到 PATH,这条命令只对当前终端会话生效 export PATH="$HOME/tools/hdc:$PATH" # 验证版本,能打印版本号说明命令已经被识别 hdc version如果你用的是电脑上的图形环境,工具包里一般会带一个环境配置脚本,双击运行后重开终端也能实现同样效果。这比自己手动改系统环境变量更安全,因为脚本通常会在执行前检查路径是否存在。手动改的时候注意别写成覆盖原 PATH,拼错把系统原有路径冲掉的话,连系统命令都会瘫痪。
第三步,装驱动。把鸿蒙设备用数据线连到电脑,弹窗或设备管理器里出现带感叹号的未知设备时,手动选择工具包里的 driver 目录进行更新。驱动装好后,hdc list targets才可能看到设备。这一步经常被跳过,原因是在手机上调试时,安卓驱动常见且系统自带了,而鸿蒙设备驱动不一定预装,尤其是开发板,插上去电脑没有任何反应,第一反应检查驱动而不是换线。
3.2 连接设备:四种连接方式与对应的排查点
连接方式决定了你接下来所有命令的稳定性。我把它分成四种,按优先级排列:
| 连接方式 | 常用命令 | 适用场景 | 优先排查点 |
|---|---|---|---|
| USB 直连 | hdc list targets | 日常调试、安装应用 | 驱动、数据线、授权弹窗 |
| Wi-Fi 连接 | hdc tconn 192.168.1.50:5555 | 设备不方便插线时 | 同网段、端口开放、设备端配置 |
| 模拟器连接 | 模拟器自带端口 | UI 自动化测试 | 模拟器版本与 hdc 兼容性 |
| 远程连接 | hdc tconn 192.168.1.50:5555 | 服务器集中管理设备 | 防火墙、设备端 hdc 服务状态 |
第一条命令永远是hdc list targets。它输出所有已经建立连接的设备,包括设备序列号和连接状态。如果输出为空,不要急着换线,先执行一下hdc kill再重新hdc start,很多时候是 server 缓存导致设备没有被重新发现。
Wi-Fi 连接在实际工作中比 USB 更常用,因为设备可以一边充电一边跑测试。命令示例:
# 连接指定 IP 和端口的设备 hdc tconn 192.168.1.50:5555 # 断开该网络连接,-r 参数是断开远程连接 hdc tconn -r 192.168.1.50:5555这里的端口不一定固定是 5555,需要看设备端配置。连接失败时先 ping 一下设备 IP,确认网络通,再确认端口,最后确认设备端的 hdc 守护进程是否在运行。这个顺序能筛掉大多数网络类坑。
当多台设备同时连接时,命令要加-t指定目标:
# 查看所有设备,获取目标设备序列号 hdc list targets # 指定某台设备执行 shell 命令 hdc -t 1234567890 shell不指定-t时,hdc 会选默认设备,通常是最早连接的那台。批量管理多台设备时,脚本里强制带上-t,否则两台设备同时在线时结果不可预测。
3.3 基础命令实战:文件传输、应用安装、日志抓取
连上设备之后,最有价值的五条命令是安装、卸载、文件发送、文件接收和日志抓取。我把它们放在一起写,形成一个最小的“能跑起来的闭环”。
# 安装 hap 包,路径必须是实际存在的文件 hdc install ./entry-default-signed.hap # 卸载应用,后面跟包名 hdc uninstall com.example.demo # 把电脑上的文件发送到设备临时目录 hdc file send ./logo.png /data/local/tmp/logo.png # 从设备拉取文件到电脑当前目录 hdc file recv /data/log/device.log ./device.log # 实时抓取设备日志,Ctrl+C 退出日志流 hdc shell hilog安装命令需要注意两点。第一,hap 包路径别带空格,带空格成功率受当前命令解释器影响,会出一些不好复现的幺蛾子;第二,覆盖安装同一个应用时,如果签名变了,必须先hdc uninstall再装,直接hdc install大概率失败。
文件传输的file send和file recv处理的是普通文件,传大文件时建议看进度,没有进度就耐心等。设备端的接收路径要保证父目录存在,比如/data/local/tmp,路径写错了不会自动帮你建目录。
日志抓取方面,hdc shell hilog会直接输出全量日志到终端。第一次跑这个命令,你会发现日志量极其恐怖,从系统启动到内部组件全部排山倒海刷过来。正经用法是先按住 Ctrl+C 退出,然后接上 grep 或 tee 做过滤,这部分放到下一章的进阶脚本里展开。
到这里,日常 80% 的操作已经覆盖了。剩下的问题基本集中在自动化脚本编写和异常排查上,接下来两章分别讲这两个方向。
4. 进阶玩法:用 hdc 自动化鸿蒙设备的调试与测试
4.1 写一个批量安装脚本:把 hdc 命令包一层
当你面对的是几十个 hap 包时,手工一条条hdc install会把人逼疯。批量安装脚本是我在实际项目里最先写的一个工具,逻辑很简单,但足够解决问题。
#!/bin/bash # 批量安装脚本,用法:./install_all.sh TARGET=$(hdc list targets | sed -n '1p') if [ -z "$TARGET" ]; then echo "没有检测到鸿蒙设备,请先连接设备" exit 1 fi for hap in *.hap; do echo "正在安装 $hap 到 $TARGET" hdc -t "$TARGET" install "$hap" || echo "$hap 安装失败,请检查签名或版本" done这段脚本先通过hdc list targets拿到第一台设备序列号,存到变量TARGET里。sed -n '1p'表示只取第一行,这个写法在多设备环境下不够严谨,但脚本设计时定了“只服务当前单台设备”,所以够用。接着for hap in *.hap遍历当前目录下所有 hap 文件,逐台安装。|| echo ...的意思是安装失败时不要中断整个循环,而是打印提示继续下一个包。
参数说明里最值得留意的就是-t:脚本运行时,机器上可能同时插着开发板和手机,不指定-t,hdc 自己选设备,装错设备是早晚的事。
如果想把脚本做得更健壮,可以加一层对hdc list targets输出格式的判断。不同版本输出列数不一样,有的版本第一行可能是空行。这时候sed -n '1p'可能抓到空值,脚本会报“没有检测到设备”。建议先用sed '/^$/d'删掉空行再取第一行:
TARGET=$(hdc list targets | sed '/^$/d' | sed -n '1p')这个细节是我在实际跑批时踩过才补上的。第一次跑,设备明明连着,脚本却提示没设备,后来手动执行hdc list targets才发现输出来第一行是空行,整个人愣住。
4.2 抓取关键日志:按进程、按级别过滤
日志抓取是这个工具包最实用的能力之一,但也是最容易用错的。全量日志是一个持续滚动的数据流,直接hdc shell hilog | grep 关键字是最基础也最通用的过滤方式。
# 抓取包含指定包名的日志,同时输出到终端和本地文件 hdc shell hilog | grep "com.example.demo" | tee "$(date +%Y%m%d_%H%M)_app.log" # 先找到进程号,再按进程号过滤,避免不同进程输出相互干扰 hdc shell "ps -ef | grep com.example.demo"第一句里,grep过滤出包含包名的行,tee把结果同时送到屏幕和文件。date +%Y%m%d_%H%M生成一个带日期时间的文件名,这样每次抓的日志不会互相覆盖。
第二句的问题在于有些日志的输出者不包含包名,只有进程号或进程名。所以更严谨的做法是:先查进程号,再把进程号喂给后续过滤。鸿蒙系统里 hilog 的不同版本支持不同的过滤参数,最简单的兼容做法就是先grep拿到候选行,再在候选里二次过滤。
需要注意:grep关键字写得太长或写错拼写,日志直接为空。我会先抓一段全量日志存成文件,然后在文件里逐步缩小 grep 范围,而不是每次都在实时流上反复试验。这样做的前提是环境允许长时间跑日志抓取,如果崩溃场景稍纵即逝,就必须实时过滤了,那就先把关键字想好再执行。
4.3 文件与配置管理:从设备拉数据、改系统参数
日志抓过来只是第一步,很多时候还需要从设备里拉数据库、配置文件或截图,这就要用到hdc file recv。我习惯先把目标目录探一遍,再决定拉哪些文件。
# 进入设备 shell,查看目标目录内容 hdc shell "ls -l /data/log" # 把整个目录拉回电脑,注意设备路径是否存在 hdc file recv /data/log ./device_log_backuphdc shell和hdc file recv组合起来,能做到“查看-定位-拉取”三连。目录不存在时,file recv会报错,所以提前ls一下能少踩坑。
系统参数修改是另一个高频操作。鸿蒙设备上有一套类似 Windows 注册表的参数系统,命令是param get和param set:
# 列出设备当前所有参数,过滤出调试相关项 hdc shell param get | grep -i "debug" # 修改一个可写参数,注意不是所有参数都能修改 hdc shell param set persist.sys.debug true参数分只读和可写两类。param get输出时能看到当前值,如果用param set改不动,大概率是该参数只读。这个信息在设备端会打印 Error 信息,看到后不要去强行绕过,那是系统层面的保护机制。
到此,hdc 的基本面和自动化面都打通了。接下来聊聊最容易被低估的部分——排错。工具本身命令不算多,真正让新手崩溃的往往是那几个隐蔽坑。
5. 鸿蒙 hdc 避坑指南:连接不稳定、命令报错、权限不足的 5 个实战排查
5.1 设备列表空白:先查线,再查驱动,最后查授权
现象:hdc list targets返回一个空列表,设备端也不弹授权窗口,电脑没有任何“设备已连接”的提示。
原因:第一嫌疑是数据线只能充电不能传数据。这类线在连接手机时不会产生系统事件,hdc 自然看不见。第二嫌疑是驱动未安装,设备管理器里能看到未知设备,但 hdc 无法识别。第三嫌疑才是开发者模式或 USB 调试开关没开。
解决:用另一根确认能传数据的线交叉验证;打开设备上的开发者模式并开启 USB 调试;如果设备端弹出“允许调试”的对话框,点允许并勾选“始终允许”。换线这一步优先级最高,我在现场见过太多人花半小时调驱动,结果换根线三秒解决。从那以后,任何设备列表为空的情况,我都强制先换线,再谈其他。
5.2 插拔后设备状态变成 offline:先杀 server 再重来
现象:设备第一次连接正常,拔掉重插后hdc list targets能看到设备编号,但状态是 offline,执行任何命令都失败。
原因:电脑侧的 hdc server 还在维持旧的连接状态,设备重新插上后新的握手没有成功,老状态没有被清理。这类问题在多台设备切换使用、频繁插拔时特别常见。
解决:执行hdc kill终止当前 server,再执行hdc start重新启动,然后重新插拔设备。整个过程 10 秒内完成。
# 杀掉当前 hdc server,让设备重新走一遍完整连接流程 hdc kill hdc start hdc list targets5.3 端口被占用导致 server 起不来:查残留进程
现象:执行任意 hdc 命令都卡住,或者提示端口被占用、无法绑定。
原因:电脑上可能运行着另一个版本或另一个工具的调试服务,占用了 hdc 默认端口。这种情况在你下载过多个平台工具、又没彻底清理时最容易出现。
解决:先找到占用端口的进程,确认后结束进程,再重启 hdc server。如果你的工具包版本支持自定义端口,也可以在配置里换一个未占用的端口,但换端口会引入新的不兼容问题,我一般不去动它。
这类问题有个典型的隐蔽场景:后台某个 IDE 自动拉起了它内置的 hdc server,你手动敲命令时版本不一致,表现就是连接时好时坏。排查时看两点:进程列表里有没有多个 hdc 实例,环境变量 PATH 里哪个目录的 hdc 被优先执行。which hdc或where hdc一敲,问题就清楚了。
5.4 安装应用失败:签名不一致是第一元凶
现象:hdc install执行后提示失败,日志里出现错误码,有的设备上连中文错误提示都没有,只有一串数字。
原因:最常见的是应用签名不一致。原来设备上已经装过同一个包名但签名不同的 hap,覆盖安装时会被系统拒绝。第二常见的是 hap 包目标版本高于设备系统版本,系统直接拒绝安装。第三是 hap 未签名,或者签名证书过期。
解决:先卸载旧应用再安装:
# 卸载干净后重新安装,注意卸载命令用的是包名 hdc uninstall com.example.demo hdc install ./com.example.demo.hap卸载后如果还失败,就需要查错误码了。错误码的解读要以工具包文档为准,不同系统小版本之间可能不一致。不要自己去猜数字含义,查文档效率最高。
5.5 日志乱码或抓不全:过滤条件比日志本身更容易出错
现象:hdc shell hilog输出乱码,或者用 grep 过滤后日志量少得可疑,甚至直接没有输出。
原因:日志缓冲区策略和设备配置会影响抓全率,如果设备重启或日志缓冲区被占满,早期的日志会直接丢。乱码问题则通常和终端字符集有关,日志本身是 UTF-8,但终端用了别的编码。
解决:不乱过滤,先抓一段全量日志确认源头,再把关键字加上。命令里给输出加tee存文件,然后用编辑器打开验证编码,终端显示乱码不一定代表文件乱码,先确认文件再怪日志。
在实际工龄里,这个问题的常见翻车点是:grep 关键字写的是调试状态中的临时打印标记,代码里改了,日志早就不打了,但你还以为只是抓取问题。所以遇到“日志抓不全”,先回代码看插桩日志是否真的存在,再回头调过滤条件。
这五条几乎覆盖了 hdc 使用中最常见的挫败场景。接下来把已经能熟练排错的经验固化成“不用脑子记”的习惯,才算真正把工具包用成自己的东西。
6. 把 hdc 用得更顺手:自定义命令别名与一键抓取脚本
6.1 给 hdc 加别名,少敲一半命令
日常敲 hdc 命令最烦的就是前缀太长。在 shell 配置里加别名是性价比最高的一步:
# 在 ~/.bashrc 或 ~/.zshrc 末尾追加这些行 alias hdls='hdc list targets' alias hdinstall='hdc install' alias hduninstall='hdc uninstall' alias hdlog='hdc shell hilog' alias hdrecv='hdc file recv' alias hdsend='hdc file send'保存后执行source ~/.bashrc生效。取别名时尽量短且有规律,hd开头一眼就知道是 hdc 相关命令。这些别名不占用太多记忆成本,但能明显提高日常输入效率。
别名只解决输入长短问题,解决不了“每次抓日志都敲同一串命令”的重复劳动,所以还要把这部分封装成函数。
6.2 一键抓取崩溃现场:把常用命令封装成函数
崩溃日志的抓取有一个典型套路:先按关键字过滤,再按时间戳保存文件。封装成函数后,以后遇到任何崩溃场景,一条命令就能拿到该拿的数据。
# 定义一个抓取函数:按关键字抓日志并自动命名文件 grab_log() { local KEY="$1" hdc shell hilog | grep "$KEY" > "log_$(date +%Y%m%d_%H%M%S).txt" } # 使用方式:抓取包含 FATAL 的日志 grab_log "FATAL"local KEY="$1"把第一个参数传给函数,date +%Y%m%d_%H%M%S精确到秒级避免重名。注意这个函数只是最简版本,实际使用时如果崩溃场景伴随设备重启,hdc shell hilog只能抓到重启后的日志,重启前的日志需要到持久化日志文件中找。工具包里如果有日志拉取脚本,可以做同样的事,但我更喜欢自己封一份,因为能按实际项目需要调过滤条件。
6.3 从工具包到工作流:我的验证习惯
现在拿到任何一台新的鸿蒙设备,我都按固定流程走:先hdc version确认工具版本;再hdc list targets确认设备识别;然后hdc shell hilog | grep -i "error"确认日志通路;最后安装一个测试 hap 确认安装链路完整。四步走完,环境才算真正可用,后面无论做自动化还是手动调试,都是在水到渠成的稳定基础上继续。
有一次我在库房临时借来一台旧开发板,直接插上就开跑,结果装应用失败,参数系统也不对,折腾了半小时才发现是 hdc 版本比设备系统新太多,协议握不上。从那以后,我每次拿到新的鸿蒙 hdc 工具包,都强制先走一遍“版本核对-设备识别-日志验证-测试安装”的固定流程,再往下干活。这套流程顺便也成了我判断一个工具包值不值得继续用的标准。希望帮到你。
本文还有配套的精品资源,点击获取