
简介鸿蒙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 的思路很容易出现“命令确实发到设备了但设备侧拒绝执行”的情况。所以第一次使用前最好是先把工具包里的命令文档过一遍而不是凭老经验猜。下面这张表能帮你快速建立定位认知对比项hdcadb面向系统鸿蒙系设备安卓系设备安装文件类型hapapk日志抓取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 # 实时抓取设备日志CtrlC 退出日志流 hdc shell hilog安装命令需要注意两点。第一hap 包路径别带空格带空格成功率受当前命令解释器影响会出一些不好复现的幺蛾子第二覆盖安装同一个应用时如果签名变了必须先hdc uninstall再装直接hdc install大概率失败。文件传输的file send和file recv处理的是普通文件传大文件时建议看进度没有进度就耐心等。设备端的接收路径要保证父目录存在比如/data/local/tmp路径写错了不会自动帮你建目录。日志抓取方面hdc shell hilog会直接输出全量日志到终端。第一次跑这个命令你会发现日志量极其恐怖从系统启动到内部组件全部排山倒海刷过来。正经用法是先按住 CtrlC 退出然后接上 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脚本运行时机器上可能同时插着开发板和手机不指定-thdc 自己选设备装错设备是早晚的事。如果想把脚本做得更健壮可以加一层对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 hdlshdc list targets alias hdinstallhdc install alias hduninstallhdc uninstall alias hdloghdc shell hilog alias hdrecvhdc file recv alias hdsendhdc 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 FATALlocal 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 工具包都强制先走一遍“版本核对-设备识别-日志验证-测试安装”的固定流程再往下干活。这套流程顺便也成了我判断一个工具包值不值得继续用的标准。希望帮到你。本文还有配套的精品资源点击获取