由于鸿蒙生态还处于初期,官方提供的hdc命令还在不断修改中,部分命令会有变动。
如果文档没来得及更新,欢迎大家提PR和Issue补充指正,觉得有用的可以点 Star⭐️收藏。
HDC(OpenHarmony Device Connector) 是为鸿蒙开发/测试人员提供的用于设备调试的命令行工具,类似Android端的ADB工具。
HDC主要有三部分组成:
hdc client
:运行于电脑上的客户端,用户可以在电脑命令终端(windows cmd/linux shell)下请求执行相应的hdc命令。hdc server
:作为后台进程也运行于电脑上,server管理client和设备端daemon之间通信包括连接的复用、数据通信包的收发,以及个别本地命令的直接处理。hdc daemon
:daemon部署于OpenHarmony设备端作为守护进程按需运行,负责处理来自client端请求。
Table of Contents
- HDC安装
- 基本用法
- 设备连接管理
- 查看设备信息
- 应用管理
- 端口转发
- 无线调试
- 文件传输
- UI模拟操作(点击滑动等)
- 屏幕截图
- 屏幕录屏
- 打开Scheme (URL)
- 获取页面布局信息(控件树)
- 录制用户操作
- 系统日志(log)
- 导出日志
- 导出crash日志
- hidumper工具
- aa工具
- bm工具
- param工具
- Instrument Test
- 性能工具
- 参考链接
HDC安装
-
下载 Command Line Tools 并解压
-
hdc
文件在command-line-tools/sdk/HarmonyOS-NEXT-DB2/openharmony/toolchains
目录下 -
配置电脑环境变量,以macOS为例,在
~/.bash_profile
或者~/.zshrc
文件中添加如下内容:
export HM_SDK_HOME="/Users/develop/command-line-tools/sdk/HarmonyOS-NEXT-DB2" //请以sdk实际安装目录为准
export PATH=$PATH:$HM_SDK_HOME/hms/toolchains:$HM_SDK_HOME/openharmony/toolchains
export HDC_SERVER_PORT=7035
也可以自行编译安装:参考鸿蒙官方gitree文档
基本用法
基本语法
hdc -t <connectKey> <command>
如果只有一个设备/模拟器连接时,可以省略掉-t <connectKey>
这一部分,直接使用hdc <command>
。在多个设备/模拟器连接的情况下需要指定-t
参数, connectKey
可以通过hdc list targets
命令获取,对应Android里的adb devices
获取的serialNumber
。
$ hdc list targets
127.0.0.1:5555 //<IP>:<Port>形式的connectKey ,一般为无线连接的设备或模拟器
FMR0223C13000649
比如给FMR0223C13000649
这个设备安装应用:
$ hdc -t FMR0223C13000649 install entry-default-signed.hap
[Info]App install path:/Users/develop/entry-default-signed.hap, queuesize:0, msg:install bundle successfully.
AppMod finish
注意事项
- 使用
hdc
,如果出现异常,可以尝试通过hdc kill -r
命令杀掉并重启hdc服务。 - 如果出现
hdc list targets
获取不到设备信息的情况,可以通过任务管理器查看是否有hdc进程存在。若进程存在,则通过hdc kill -r
命令杀掉该进程。
设备连接管理
查看HDC版本
$ hdc -v
Ver: 2.0.0a
启动/停止 HDC Server
停止
$ hdc kill
Kill server finish
重启
$ hdc start -r
查询设备列表
$ hdc list targets
127.0.0.1:5555
FMR0223C13000649
-v
选项 显示详细信息
$ hdc list targets -v
127.0.0.1:5555 TCP Connected localhost
FMR0223C13000649 USB Connected unknown...
输出的内容第一列为设备的connectKey
, 第二列是设备连接方式
,第三列为设备连接状态
,第四列暂时未知
查询设备UDID
$ hdc shell bm get --udid
udid of current device is :
C46284C052AE01BBD2358FE44B279524B508FC959AAB5F4B0B74E42A06569B7E
这个udid
在用开发者账号打包时,需要添加这个udid
到对应的profile
文件中
重启手机
$ hdc target boot
查看设备信息
名称
$ hdc shell param get const.product.name
HUAWEI Mate 60 Pro
Brand
$ hdc shell param get const.product.brand
HUAWEI
Model
$ hdc shell param get const.product.model
ALN-AL00
系统版本
$ hdc shell param get const.product.software.version
ALN-AL00 5.0.0.22(SP35DEVC00E22R4P1log)
OS版本
$ hdc shell param get const.ohos.apiversion
12
CPU架构
$ hdc shell param get const.product.cpu.abilist
arm64-v8a
分辩率
$ hdc shell hidumper -s RenderService -a screen
-------------------------------[ability]-------------------------------
----------------------------------RenderService---------------------------------
-- ScreenInfo
screen[0]: id=0, powerstatus=POWER_STATUS_OFF, backlight=51, screenType=EXTERNAL_TYPE, render size: 1260x2720, physical screen resolution: 1260x2720, isvirtual=false, skipFrameInterval_:1
supportedMode[0]: 1260x2720, refreshrate=120
supportedMode[1]: 1260x2720, refreshrate=90
supportedMode[2]: 1260x2720, refreshrate=60
supportedMode[3]: 1260x2720, refreshrate=30
activeMode: 1260x2720, refreshrate=60
capability: name=, phywidth=72, phyheight=156,supportlayers=12, virtualDispCount=0, propCount=0, type=DISP_INTF_HDMI, supportWriteBack=false
执行上述命令后,解析返回内容,可以通过正则表达式提取1260x2720
wlan IP
$ hdc shell ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:99055 errors:0 dropped:0 overruns:0 frame:0
TX packets:99055 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5889697 TX bytes:5889697
wlan0 Link encap:Ethernet HWaddr ea:f9:7d:21:52:31
inet addr:172.31.125.111 Bcast:172.31.125.255 Mask:255.255.254.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1232924 errors:0 dropped:0 overruns:0 frame:0
TX packets:2061202 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:877179224 TX bytes:2570352818
p2p0 Link encap:Ethernet HWaddr d2:0d:f7:cc:12:fb
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0
chba0 Link encap:Ethernet HWaddr ec:11:05:fb:18:66
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0
注意:这个命令在Beta3版本之前,会提示Cannot open netlink socket: Permission denied
,需要升级系统。
电量/温度
$ hdc shell hidumper -s BatteryService -a -i
-------------------------------[ability]-------------------------------
----------------------------------BatteryService---------------------------------
Current time: 2024-05-30 12:08:37.419
capacity: 100
batteryLevel: 1
chargingStatus: 3
healthState: 1
pluggedType: 1
voltage: 4496732
present: 1
technology: Li-poly
nowCurrent: 123
currentAverage: 83
totalEnergy: 5203
remainingEnergy: 5207
remainingChargeTime: 0
temperature: 280
chargeType: 1
查看屏幕信息
$ hdc shell hidumper -s DisplayManagerService -a -a
-------------------------------[ability]-------------------------------
----------------------------------DisplayManagerService----------------------------------
-------------- DMS Multi User Info --------------
[oldScbPid:]
[userId:] 100
[ScbPid:] 4438
---------------- Screen ID: 0 ----------------
FoldStatus: UNKNOWN
[SCREEN SESSION]
Name: UNKNOWN
RSScreenId: 0
activeModes<id, W, H, RS>: 0, 1260, 2720, 120
SourceMode: 0
ScreenCombination: 0
Orientation: 0
Rotation: 0
ScreenRequestedOrientation: 0
[RS INFO]
SupportedColorGamuts: 0, 4, 6
ScreenColorGamut: 4
GraphicPixelFormat: 0
SupportedScreenHDRFormat: 2, 1, 3
ScreenHDRFormat: 2
SupportedColorSpaces: 0, 2294273, 2294278
ScreenColorSpace: 2294273
[CUTOUT INFO]
WaterFall_L<X,Y,W,H>: 0, 0, 0, 0
WaterFall_T<X,Y,W,H>: 0, 0, 0, 0
WaterFall_R<X,Y,W,H>: 0, 0, 0, 0
WaterFall_B<X,Y,W,H>: 0, 0, 0, 0
BoundingRects<X,Y,W,H>: [494, 36, 273, 72]
[SCREEN INFO]
VirtualWidth: 387
VirtualHeight: 836
LastParentId: 18446744073709551615
ParentId: 1
IsScreenGroup: 0
VirtualPixelRatio: 3.25
Rotation: 0
Orientation: 0
SourceMode: 0
ScreenType: 1
[SCREEN PROPERTY]
Rotation: 0
Density: 3.25
DensityInCurResolution: 3.25
PhyWidth: 72
PhyHeight: 156
RefreshRate: 60
VirtualPixelRatio: 3.25
ScreenRotation: 0
Orientation: 0
DisplayOrientation: 0
GetScreenType: 1
ReqOrientation: 0
DPI<X, Y>: 444.5, 442.871
Offset<X, Y>: 0, 0
Bounds<L,T,W,H>: 0, 0, 1260, 2720,
PhyBounds<L,T,W,H>: 0, 0, 1260, 2720,
AvailableArea<X,Y,W,H>