官网:HDC常见命令
全局option相关命令
Option | 说明 |
---|---|
-t [key] [command] | 指定连接唯一标识的目标设备。标识可通过命令hdc list targets查询。 |
help/-h | 打印hdc帮助信息。 |
version/-v | 打印hdc版本信息。 |
-l [level] | 指定运行时日志等级,默认为LOG_INFO。 |
checkserver | 获取client-server版本。 |
- 显示hdc相关的帮助信息,命令格式如下:
1
hdc -h
返回值:
返回值 | 说明 |
---|---|
HarmonyOS device connector(HDC) … ———————————global commands:————————— -h/help [verbose] - Print hdc help, ‘verbose’ for more other cmds …(此处省略详细帮助信息) |
hdc命令使用帮助信息 |
使用方法:
1 | hdc -h |
- 显示hdc的版本信息,命令格式如下:
1
hdc -v
返回值:
返回值 | 说明 |
---|---|
Ver: X.X.Xa | hdc(SDK)的版本信息 |
使用方法:
1 | hdc -v |
- 连接设备时,若仅有一台,无需指定设备标识;若有多台,一次仅能连接一台,每次连接时需要指定连接设备的标识,命令格式如下:参数:
1
hdc -t [key] [command]
参数名 | 说明 |
---|---|
key | IP地址或USB序列号。 |
command | hdc支持的命令。 |
返回值:
返回值 | 说明 |
---|---|
命令执行返回内容 | 请参考对应命令的返回值 |
[Fail]Not match target founded, check connect-key please | 连接的设备不存在 |
[Fail]ExecuteCommand need connect-key? | 连接的设备不存在或同时连接多台设备时,未指定连接设备标识 |
Unknown operation command… | 不支持的命令 |
使用方法:
该方法需要与具体的操作命令搭配使用,下面以shell命令举例:
1 | hdc list targets // 获取设备信息 |
[!说明]
一台用于开发的电脑可连接多个设备,每个设备有唯一的标识。如果通过网络连接设备,标识为IP地址;如果通过usb连接,标识为USB序列号。该命令需要跟随具体的操作命令。
- 指定运行时日志等级,默认为LOG_INFO,命令格式如下:参数:
1
hdc -l [level] [command]
参数 | 说明 |
---|---|
[level] | 指定运行时日志等级 0:LOG_OFF 1:LOG_FATAL 2:LOG_WARN 3:LOG_INFO 4:LOG_DEBUG 5:LOG_ALL |
command | hdc支持的命令 |
返回值:
返回值 | 说明 |
---|---|
命令执行返回内容 | 请参考对应命令的返回值 |
LOG日志信息 | 对应指定的运行时等级日志打印 |
使用方法:
1 | hdc -l 5 shell ls |
- 获取client-server版本,命令格式如下:返回值:
1
hdc checkserver
返回值 | 说明 |
---|---|
Client version: Ver: X.X.Xa, server version: Ver: X.X.Xa | client-server版本号 |
使用方法:
1 | hdc checkserver |
查询设备列表相关命令
命令 | 说明 |
---|---|
list targets [-v] | 查询已连接的所有目标设备,添加-v选项,则会打印设备详细信息。 |
显示所有已连接的设备列表,命令格式如下:
1 | hdc list targets[-v] |
返回值:
返回值 | 说明 |
---|---|
设备信息 | 已连接的设备列表信息 |
[Empty] | 没有查询到设备信息 |
使用方法:
1 | hdc list targets |
服务进程相关命令
命令 | 说明 |
---|---|
target mount | 读写模式挂载系统分区。(user不可用) |
target boot | 重启目标设备,查看目标列表可用list targets命令。 |
smode [-r] | 授予设备端hdc后台服务进程root权限, 使用-r参数取消授权。(user不可用) |
kill [-r] | 终止hdc服务进程,使用-r参数触发服务进程重新启动。 |
start [-r] | 启动hdc服务进程,使用-r参数触发服务进程重新启动。 |
- 以读写模式挂载系统分区,命令格式如下:
1
hdc target mount
返回值:
返回值 | 说明 |
---|---|
Mount finish | 挂载成功 |
[Fail]具体失败信息 | 挂载失败 |
使用方法:
1 | hdc target mount |
- 授予设备端hdc后台服务进程root权限,命令格式如下:
1
hdc smode
返回值:
返回值 | 说明 |
---|---|
无返回值 | 授予权限成功 |
[Fail]具体失败信息 | 授予权限失败 |
使用方法:
1 | hdc smode |
- 终止hdc服务进程,命令格式如下:
1
hdc kill
返回值:
返回值 | 说明 |
---|---|
Kill server finish | 服务进程终止成功 |
[Fail]具体失败信息 | 服务进程终止失败 |
使用方法:
1 | hdc kill |
- 启动hdc服务进程,命令格式如下:返回值:
1
hdc start
返回值 | 说明 |
---|---|
无返回值 | 服务进程启动成功 |
[Fail]具体失败信息 | 服务进程启动失败 |
使用方法:
1 | hdc start |
网络相关命令
命令 | 说明 |
---|---|
fport ls | 列出全部转发端口转发任务。 |
fport local remote | 设置正向端口转发任务:监听“主机端口”,接收请求并进行转发, 转发到“设备端口”。 |
fport rm local__remote | 删除正向端口转发任务:取消指定的“主机端口”转发。 |
rport remote local | 设置反向端口转发任务:监听“设备端口”,接收请求并进行转发,转发到“主机端口”。 |
rport rm remote local | 删除反向端口转发任务:取消指定的“设备端口”转发。 |
tmode usb | 已连接设备切换为USB连接方式:设备端daemon进程重启,并首先选用USB连接方式。 |
tmode port [port-number] | 已连接设备切换为网络连接方式:设备端daemon进程重启,并优先使用网络方式连接设备,如果连接设备失败,再选择USB连接。 |
tconn_ host_[:port] [-remove] | 指定连接设备:通过“IP地址:端口号”来指定连接的设备,使用-remove参数断开连接。 |
- 列出全部转发端口转发任务,命令格式如下:返回值:
1
hdc fport ls
返回值 | 说明 |
---|---|
‘tcp:1234 tcp:1080’ [Forward] | 正向端口转发任务。 |
‘tcp:2080 tcp:2345’ [Reverse] | 反向端口转发任务。 |
[empty] | 无端口转发任务。 |
使用方法:
1 | hdc fport ls |
- 设置正向端口转发任务,执行后将设置指定的“主机端口”转发数据到“设备端口”转发任务,命令格式如下:返回值:
1
hdc fport local remote
返回值 | 说明 |
---|---|
Forwardport result:OK | 端口转发任务设置正常。 |
[Fail]Incorrect forward command | 端口转发任务设置失败,端口转发参数错误。 |
[Fail]TCP Port listen failed at XXXX | 端口转发任务设置失败,本地转发端口被占用。 |
使用方法:
1 | hdc fport tcp:1234 tcp:1080 |
- 删除正向端口转发任务,执行后将指定的“主机端口”转发数据到“设备端口”转发任务删除,命令格式如下:返回值:
1
hdc fport rm localremote
返回值 | 说明 |
---|---|
Remove forward ruler success, ruler:tcp:XXXX tcp:XXXX | 端口转发任务删除正常。 |
[Fail]Remove forward ruler failed, ruler is not exist tcp:XXXX tcp:XXXX | 端口转发任务删除失败,不存在指定的转发任务。 |
使用方法:
1 | hdc fport rm tcp:1234 tcp:1080 |
- 设置反向端口转发任务,执行后将设置指定的“设备端口”转发数据到“主机端口”转发任务,命令格式如下:返回值:
1
hdc rport remote local
返回值 | 说明 |
---|---|
Forwardport result:OK | 端口转发任务设置正常。 |
[Fail]Incorrect forward command | 端口转发任务设置失败,端口转发参数错误。 |
[Fail]TCP Port listen failed at XXXX | 端口转发任务设置失败,本地转发端口被占用。 |
使用方法:
1 | hdc rport tcp:1234 tcp:1080 |
- 删除反向端口转发任务,执行后将指定的“设备端口”转发数据到“主机端口”任务删除,命令格式如下:返回值:
1
hdc rport rm remote local
返回值 | 说明 |
---|---|
Remove forward ruler success, ruler:tcp:XXXX tcp:XXXX | 端口转发任务删除正常。 |
[Fail]Remove forward ruler failed, ruler is not exist tcp:XXXX tcp:XXXX | 端口转发任务删除失败,不存在对应的转发任务。 |
使用方法:
1 | hdc rport rm tcp:1234 tcp:1080 |
- 已连接设备切换为USB连接方式,命令格式如下:返回值:
1
hdc tmode usb
返回值 | 说明 |
---|---|
无 | 切换成功。 |
[Fail]ExecuteCommand need connect-key | 设备列表无网络连接方式设备,无法指定设备切换连接方式。 |
使用方法:
1 | hdc tmode usb |
- 已连接设备切换为网络连接方式,命令格式如下:参数:
1
hdc tmode port [port-number]
参数 | 参数说明 |
---|---|
port-number | 监听连接的网络端口号,范围:1~65536。 |
返回值:
返回值 | 说明 |
---|---|
无 | 切换成功。 |
[Fail]ExecuteCommand need connect-key | 切换失败,设备列表无设备,无法指定设备切换连接方式。 |
[Fail]Incorrect port range | 端口号超出可设置范围(1~65536)。 |
使用方法:
1 | hdc tmode port 1234 |
[!注意]
切换前,请确保条件满足:远端设备与近端执行机处于同一网络,且执行机可ping通远端设备IP。
如不满足以上条件请勿使用该命令进行切换。
[!说明]
执行完毕后,远端daemon将会退出并重启,USB连接将会断开,默认启用TCP连接,且仅可通过TCP进行连接,如需恢复USB连接有以下两种方法:
(1)执行hdc tconn [ip]:[port]命令进行TCP连接后,执行hdc tmode usb恢复。
(2)通过恢复出厂设置恢复。
- 指定连接的设备,命令格式如下:参数:
1
hdc tconn host[:port] [-remove]
参数 | 参数说明 |
---|---|
host[:port] | 设备IP地址与端口号,格式按照“IP地址:端口号“。 |
-remove | 【可选】断开指定设备的连接。 |
返回值:
返回值 | 说明 |
---|---|
Connect OK | 连接成功。 |
[Info]Target is connected, repeat opration | 设备当前已连接。 |
[Fail]Connect failed | 连接失败。 |
使用方法:
1 | hdc tconn 192.168.0.1:8888 |
文件相关命令
命令 | 说明 |
---|---|
file send local remote | 从本地发送文件至远端设备。 |
file recv remote local | 从远端设备发送文件至本地。 |
- 从本地发送文件至远端设备,命令格式如下:参数:
1
hdc file send local remote
参数名 | 说明 |
---|---|
local | 本地待发送的文件路径。 |
remote | 远程待接收的文件路径。 |
返回值:
文件发送成功,返回传输成功的结果信息。文件发送失败,返回传输失败的具体信息。
使用方法:
1 | hdc file send E:\example.txt /data/local/tmp/example.txt |
- 从远端设备发送文件至本地,命令格式如下:参数:
1
hdc file recv remote local
参数名 | 说明 |
---|---|
local | 本地待接收的文件路径。 |
remote | 远程待发送的文件路径。 |
返回值:
文件接收成功,返回传输成功的结果信息。文件接收失败,返回传输失败的具体信息。
使用方法:
1 | hdc file recv /data/local/tmp/a.txt ./a.txt |
应用相关命令
命令 | 说明 |
---|---|
install [-r/-g] packageFile | 安装指定的应用package文件。 |
uninstall_ packageName_ | 卸载指定的应用包package包名。 |
- 安装APP package,命令格式如下:参数:
1
hdc install [-r/-g] packageFile
参数名 | 说明 |
---|---|
packageFile | 应用安装包文件名。 |
-r | 替换已存在应用。 |
-g | 应用动态授权。 |
返回值:
返回值 | 说明 |
---|---|
无 | 成功情况下无返回值。 |
具体安装失败原因 | 失败情况下返回具体安装失败信息。 |
使用方法:
以安装com.example.hello包为例:
1 | hdc install E:\com.example.hello.hap |
- 卸载应用,命令格式如下:参数:
1
hdc uninstall [-k] packageName
参数名 | 说明 |
---|---|
packageName | 应用安装包。 |
-k | 保留/data/cache。 |
返回值:
返回值 | 说明 |
---|---|
无 | 成功情况下无返回值。 |
具体卸载失败原因 | 失败情况下返回具体卸载失败信息。 |
使用方法:
以卸载com.example.hello包为例:
1 | hdc uninstall com.example.hello |
调试相关命令
命令 | 说明 |
---|---|
jpid | 显示可调试应用列表。 |
hilog [options] | 打印设备端的日志信息,options表示hilog支持的参数,可通过hdc hilog -h查阅支持的参数列表 。 |
shell [COMMAND] | 交互命令,COMMAND表示需要执行的单次命令。不同类型或版本的系统支持的COMMAND命令有所差异,可以通过hdc shell ls /system/bin查阅支持的命令列表。 |
- 抓取log信息,命令格式如下:参数:
1
hdc hilog[options]
参数 | 说明 |
---|---|
[options] | hilog支持的参数,可通过hdc hilog -h查阅支持的参数列表。 |
返回值:
返回值 | 说明 |
---|---|
返回具体信息 | 抓取的日志信息。 |
使用方法:
1 | hdc hilog |
- 显示可调试应用列表,命令格式如下:返回值:
1
hdc jpid
返回值 | 说明 |
---|---|
应用名列表 | 可调试应用名列表。 |
[empty] | 无可调式应用。 |
使用方法:
1 | hdc jpid |
- 交互命令,命令格式如下:参数:
1
hdc shell
参数 | 说明 |
---|---|
[COMMAND] | 调试命令行可用命令,详细可用命令help来获取全部命令提示。 |
返回值:
返回值 | 说明 |
---|---|
交互命令返回内容 | 返回内容详情请参见其他交互命令返回内容。 |
/bin/sh: XXX : inaccessible or not found | 不支持的交互命令。 |
使用方法:
1 | hdc shell ps -ef |
鸿蒙HDC命令合集
HDC 安装
- 通过访问社区网站(http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist)下载 ohos-sdk-public 或正式发布的 sdk 压缩包
- 配置电脑环境变量, 以 macOS 为例,在
~/.bash_profile
或者~/.zshrc
文件中添加如下内容:也可以自行编译安装:参考鸿蒙官方 gitree 文档1
2export PATH=$PATH:/Users/Huawei/Sdk/hmscore/4.2.1/toolchains //请以sdk实际安装目录为准
export HDC_SERVER_PORT=7035基本语法
如果只有一个设备/模拟器连接时,可以省略掉1
hdc -t <connectKey> <command>
-t <connectKey>
这一部分,直接使用hdc <command>
。在多个设备/模拟器连接的情况下需要指定-t
参数,connectKey
可以通过hdc list targets
命令获取,对应 Android 里的adb devices
获取的serialNumber
。注意事项1
$ hdc list targets
- 使用
hdc
,如果出现异常,可以尝试通过hdc kill -r
命令杀掉并重启 hdc 服务。 - 如果出现
hdc list targets
获取不到设备信息的情况,可以通过任务管理器查看是否有 hdc 进程存在。若进程存在,则通过hdc kill -r
命令杀掉该进程设备连接管理
查看版本
1
$ hdc -v
启动/停止 HDC Server
停止重启1
$ hdc kill
1
$ hdc start -r
查询设备列表
1
$ hdc list targets
-v
选项 显示详细信息输出的内容第一列为设备的1
2
3
4$ hdc list targets -v
127.0.0.1:5555 TCP Connected localhost
FMR0223C13000649 USB Connected unknown...connectKey
, 第二列是设备连接方式
,第三列为设备连接状态
,第四列暂时未知查询设备 UDID
这个1
2
3
4$ hdc shell bm get --udid
udid of current device is :
C46284C052AE01BBD2358FE44B279524B508FC959AAB5F4B0B74E42A06569B7Eudid
在用开发者账号打包时,需要添加这个udid
到对应的profile
文件中重启手机
1
$ hdc target boot
应用管理
安装应用
1 | $ hdc app install entry-default-signed.hap |
或者
1 | $ hdc install entry-default-signed.hap |
卸载应用
1 | $ hdc app uninstall com.kk.hmscrcpy |
或者
1 | $ hdc uninstall com.kk.hmscrcpy |
获取应用列表
解释
1 | $ hdc shell bm dump -a |
启动应用
通过启动Ability
来拉起APP
1 | hdc shell aa start -a {abilityName} -b {bundleName} |
- 其中
bundleName
可以通过hdc shell bm dump -a
获取 - 其中
abilityName
可以通过如下命令获取(查看当前任务栈的 ability 信息)
解释1
$ hdc shell aa dump -l # 运行命令前需要手动打开app
退出应用
强制退出应用1
hdc shell aa force-stop {bundleName}
- 其中
bundleName
可以通过hdc shell bm dump -a
获取获取应用版本
执行上述命令后,再解析 json, 提取1
$ hdc shell bm dump -n {bundleName}
versionName
字段即可
Dump 应用信息
aa dump
1 | $ hdc shell aa dump -h |
bm dump
1 | $ hdc shell bm dump -h |
获取应用 Ability 信息
1 | $ hdc shell aa dump -l //运行命令前需要手动打开app |
获取应用详情
查询该应用的详细信息
1 | $ hdc shell bm dump -n com.kuaishou.hmapp |
通过这个命令可以获取到很多应用的关键信息,比如reqPermissions
,version
,abilities
等等
清除应用数据
1 | $ hdc shell aa dump -l # 运行命令前需要手动打开app$ hdc shell bm clean -h |
清除应用缓存
1 | $ hdc shell bm clean -n {bundleName} -c |
其中bundleName
可以通过hdc shell bm dump -a
获取, 比如com.kuaishou.hmapp
清除应用数据
1 | $ hdc shell bm clean -n {bundleName} -d |
显示可调试应用列表
1 | $ hdc jpid |
jpid
显示可调试应用列表track-jpid
动态显示可调试应用列表。
查看设备信息
名称
1 | $ hdc shell param get const.product.name |
Brand
1 | $ hdc shell param get const.product.brand |
Model
1 | $ hdc shell param get const.product.model |
系统版本
1 | $ hdc shell param get const.product.software.version |
OS 版本
1 | $ hdc shell param get const.ohos.apiversion |
CPU 架构
1 | $ hdc shell param get const.product.cpu.abilist |
分辩率
1 | $ hdc shell hidumper -s RenderService -a screen |
执行上述命令后,解析返回内容,可以通过正则表达式提取1260x2720
wlanip
1 | $ hdc shell ip address show |
电量/温度
1 | $ hdc shell hidumper -s BatteryService -a -i |
查看屏幕状态
可以通过如下命令判断屏幕是否点亮
1 | $ hdc shell hidumper -s 3301 -a -a |
端口转发
命令 | 说明 |
---|---|
fport ls | 展示全部 “端口转发主机端口转发数据到设备侧端口” 的转发任务 |
fport local remote | 端口转发主机端口转发数据到设备侧端口 |
fport rm local remote | 删除指定 “端口转发主机端口转发数据到设备侧端口” 的转发任务 |
rport ls | 展示全部 “端口转发设备侧端口转发数据到主机端口” 的转发任务 |
rport local remote | 端口转发设备侧端口转发数据到主机端口 |
rport rm local remote | 删除指定 “端口转发设备侧端口转发数据到主机端口” 的转发任务 |
显示端口转发列表
展示电脑端口转发到手机端口的列表
1 | $ hdc fport ls |
本地端口转发到手机
将本地电脑的7913
端口转发到手机7912
端口
1 | $ hdc fport tcp:7913 tcp:7912 |
这个命令非常实用,比如我再手机上实现了一个 http
服务,没有这个命令前需要通过手机ip:port
来访问,这就需要提前知道手机的wlanIP
,执行这个命令后可以直接通过localhost:localPort
来访问手机里的服务。
删除端口转发任务
1 | $ hdc fport rm tcp:7913 |
同理,rport
命令表示手机端口转发到电脑端口,我就不一一举例了.
无线调试
- 在手机上开启 5555 端口
hdc -t {SERIAL} tmode port {PORT}
- 连接手机上的端口
hdc -t {SERIAL} tconn {WLANIP}:{PORT}
- 恢复手机 USB 连接
hdc -t {SERIAL} tmode usb
示例
1 | $ hdc tmode port 5555 |
不过目前这个无线调试,会导致该手机 USB 连接方式断开,导致无法进行端口转发,每次进行无线调试时,需要知道手机的 wlanip 才行。
这个问题也在和鸿蒙方沟通,待解决。
记个 TODO.
文件传输
命令 | 说明 |
---|---|
file send local remote | 从本地发送文件至远端设备 |
file recv remote local | 从远端设备发送文件至本地 |
从本地电脑发送文件至手机
1 | $ hdc file send ~/layout_407568854.json /data/local/tmp/layout_407568854.json |
从手机拷贝文件至本地电脑
1 | $ hdc file recv /data/local/tmp/layout_407568854.json ~/layout_407568854.json |
uitest 工具
1 | $ hdc shell uitest help |
UI 模拟操作
支持操作类型:点击
双击
长按
慢滑
快滑
拖拽
输入文字
KeyEvent
配置参数名 | 配置参数含义 | 配置参数取值 | 示例 |
---|---|---|---|
click | 模拟单击操作 | point_x (必选参数,点击 x 坐标点) point_y (必选参数,点击 y 坐标点) |
hdc shell uitest uiInput click point_x point_y |
doubleClick | 模拟双击操作 | point_x (必选参数,双击 x 坐标点) point_y (必选参数,双击 y 坐标点) |
hdc shell uitest uiInput doubleClick point_x point_y |
longClick | 模拟长按操作 | point_x (必选参数,长按 x 坐标点) point_y (必选参数,长按 y 坐标点) |
hdc shell uitest uiInput longClick point_x point_y |
fling | 模拟快滑操作 | from_x (必选参数,滑动起点 x 坐标) from_y(必选参数,滑动起点 y 坐标) to_x(必选参数,滑动终点 x 坐标) to_y(必选参数,滑动终点 y 坐标) swipeVelocityPps_ (可选参数,滑动速度,取值范围: 200-40000, 默认值: 600, 单位: px/s) stepLength(可选参数,滑动步长,默认值:滑动距离/50, 单位: px) |
hdc shell uitest uiInput fling from_x from_y to_x to_y swipeVelocityPps_ stepLength |
swipe | 模拟慢滑操作 | from_x (必选参数,滑动起点 x 坐标) from_y(必选参数,滑动起点 y 坐标) to_x(必选参数,滑动终点 x 坐标) to_y(必选参数,滑动终点 y 坐标) swipeVelocityPps_ (可选参数,滑动速度,取值范围: 200-40000, 默认值: 600, 单位: px/s) |
hdc shell uitest uiInput swipe from_x from_y to_x to_y swipeVelocityPps_ |
drag | 模拟拖拽操作 | from_x (必选参数,拖拽起点 x 坐标) from_y(必选参数,拖拽起点 y 坐标) to_x(必选参数,拖拽终点 x 坐标) to_y(必选参数,拖拽终点 y 坐标) swipeVelocityPps_ (可选参数,滑动速度,取值范围: 200-40000, 默认值: 600, 单位: px/s) |
hdc shell uitest uiInput drag from_x from_y to_x to_y swipeVelocityPps_ |
dircFling | 模拟指定方向滑动操作 | direction (可选参数,滑动方向,可选值: [0,1,2,3], 滑动方向: [左,右,上,下],默认值: 0) swipeVelocityPps_ (可选参数,滑动速度,取值范围: 200-40000, 默认值: 600, 单位: px/s) stepLength(可选参数,滑动步长,默认值:滑动距离/50, 单位: px) |
hdc shell uitest uiInput dircFling direction swipeVelocityPps_ stepLength |
inputText | 模拟输入框输入文本操作 | point_x (必选参数,输入框 x 坐标点) point_y (必选参数,输入框 y 坐标点) input(输入文本) |
hdc shell uitest uiInput inputText point_x point_y text |
keyEvent | 模拟实体按键事件 (如:键盘,电源键,返回上一级,返回桌面等),以及组合按键操作 | keyID (必选参数,实体按键对应 ID) keyID2 (可选参数,实体按键对应 ID) |
hdc shell uitest uiInput keyEvent keyID |
举例
1 | //点击 |
keyEvent
映射表可以参考这个文档:https://docs.openharmony.cn/pages/v4.1/en/application-dev/reference/apis-input-kit/js-apis-keycode.md
获取页面布局信息(控件树)
1 | $ hdc shell uitest dumpLayout -p {saveDumpPath} # 运行命令前需要手动打开app,进入对应页面 |
-p
表示控件树保存的目录,如果不指定,则默认保存在手机的/data/local/tmp
目录
/data/local/tmp/layout_407568854.json
文件内容如下:
1 | { |
录制用户操作
将当前界面操作记录到/data/local/tmp/layout/record.csv
,结束录制操作使用Ctrl+C
结束录制
1 | $ hdc shell uitest uiRecord record |
支持两种方式查看数据:
uiRecord record
, 将事件的位置坐标写入文件uiRecord read
, 将文件内容打印到控制台
录制完成后,再将csv
文件拷贝到电脑上1
$ hdc file recv /data/local/tmp/layout/record.csv ~/record.csv
record
数据字段含义请参考如下示例数据1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35{
"ABILITY": "com.ohos.launcher.MainAbility", // 前台应用界面
"BUNDLE": "com.ohos.launcher", // 操作应用
"CENTER_X": "", // 模拟捏合中心X, pinch事件
"CENTER_Y": "", // 模拟捏合中心Y, pinch事件
"EVENT_TYPE": "pointer", //
"LENGTH": "0", // 总体步长
"OP_TYPE": "click", //事件类型,当前支持点击、双击、长按、拖拽、捏合、滑动、抛滑动作录制
"VELO": "0.000000", // 离手速度
"direction.X": "0.000000",// 总体移动X方向
"direction.Y": "0.000000", // 总体移动Y方向
"duration": 33885000.0, // 手势操作持续时间
"fingerList": [{
"LENGTH": "0", // 总体步长
"MAX_VEL": "40000", // 最大速度
"VELO": "0.000000", // 离手速度
"W1_BOUNDS": "{"bottom":361,"left":37,"right":118,"top":280}", // 起点控件bounds
"W1_HIER": "ROOT,3,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0", // 起点控件hierarchy
"W1_ID": "", // 起点控件id
"W1_Text": "", // 起点控件text
"W1_Type": "Image", // 起点控件类型
"W2_BOUNDS": "{"bottom":361,"left":37,"right":118,"top":280}", // 终点控件bounds
"W2_HIER": "ROOT,3,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0", // 终点控件hierarchy
"W2_ID": "", // 终点控件id
"W2_Text": "", // 终点控件text
"W2_Type": "Image", // 终点控件类型
"X2_POSI": "47", // 终点X
"X_POSI": "47", // 起点X
"Y2_POSI": "301", // 终点Y
"Y_POSI": "301", // 起点Y
"direction.X": "0.000000", // x方向移动量
"direction.Y": "0.000000" // Y方向移动量
}],
"fingerNumber": "1" //手指数量
}
屏幕截图
hdc 提供了两种截图命令
方式一
1 | $ hdc shell uitest screenCap |
【推荐】方式二
1 | $ hdc shell snapshot_display -f /data/local/2.png |
方式二的截图性能效率远远高于方式一
屏幕录屏
hdc 命令还未支持,官方在开发中。。。
收起键盘
1 | $ hdc shell uinput -K -d 2 -i 2 -u 2 |
hidumper 工具
1 | $ hdc shell hidumper -h |
system abilities
1 | $ hdc shell hidumper -ls |
获取到 abilities 后,就可以指定 service 获取相关的信息。 比如通过 RenderService 获取一些信息
1 | $ hdc shell hidumper -s RenderService |
获取分辩率
1 | $ hdc shell hidumper -s RenderService -a screen |
获取帧率
首先执行如下命令进入到 shell 环境
1 | $ hdc shell |
然后执行hidumper [surface name] fps
, 例如composer fps
1 | $ hidumper -s RenderService -a "composer fps" |
aa 工具
Ability assistant(Ability 助手,简称为 aa),是实现应用及测试用例启动功能的工具,为开发者提供基本的应用调试和测试能力,例如启动应用组件、强制停止进程、打印应用组件相关信息等。
1 | $ hdc shell aa help |
start
stop-service
force-stop
test
attach
detach
appdebug
详细介绍请参考文档:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/tools/aa-tool.md
bm 工具
Bundle Manager(包管理工具,简称 bm)是实现应用安装、卸载、更新、查询等功能的工具,bm 为开发者提供基本的应用安装包的调试能力,例如:安装应用,卸载应用,查询安装包信息等。
1 | $ hdc shell bm help |
install
uninstall
dump
clean
enable
disable
get
详细介绍请参考文档:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/tools/bm-tool.md
param 工具
param 是为开发人员提供用于操作系统参数的工具,该工具只支持标准系统。
1 | $ hdc shell param |
详细介绍请参考文档:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/tools/param-tool.md
设备日志
1 | $ hdc hilog -h |
Instrument Test
主要用来做 APP 的 UI 自动化测试,将应用测试包安装到测试设备上,在 cmd 窗口中执行 aa 命令,完成对用例测试。
aa test
命令执行配置参数
执行参数全写 | 执行参数缩写 | 执行参数含义 | 执行参数示例 |
---|---|---|---|
–bundleName | -b | 应用 Bundle 名称 | -b com.test.example |
–packageName | -p | 应用模块名,适用于 FA 模型应用 | -p com.test.example.entry |
–moduleName | -m | 应用模块名,适用于 STAGE 模型应用 | -m entry |
NA | -s | 特定参数,以 键值对方式传入 | -s unittest /ets/testrunner/OpenHarmonyTestRunner |
1 | $ hdc shell aa test -h |
举例
1 | $ hdc shell aa test -b com.example.myapplication -m entry_test -s unittest /ets/testrunner/OpenHarmonyTestRunner -s class UiTestDemo timeout 15000 |
查看测试结果
cmd 模式执行过程,会打印如下相关日志信息。
性能工具
SmartPerf
是一款基于系统开发的性能功耗测试工具,操作简单易用。工具可以检测性能、功耗相关指标,包括FPS
、CPU
、GPU
、RAM
、Temp
等,通过量化的指标项了解应用性能状况。在开发过程中,使用的可能是有屏或无屏设备,对此SmartPerf
提供了两种方式:分别是SmartPerf-Device
和SmartPerf-Daemon
。SmartPerf-Device
适用于有屏设备,支持可视化操作。测试时是通过悬浮窗的开始和暂停来实时展示性能指标数据,保存后可生成数据报告,在报告中可分析各指标数据详情。SmartPerf-Daemon
支持shell命令行
方式,同时适用于有屏和无屏设备。
- CPU:每秒读取一次设备节点下 CPU 大中小核的频点和各核使用率,衡量应用占用 CPU 资源的情况,占用过多的 CPU 资源会导致芯片发烫。
- GPU:每秒读取一次设备节点下 GPU 的频点和负载信息,衡量应用占用 GPU 资源的情况,当 GPU 占用过多时,会导致性能下降,应用程序的运行速度变慢。
- FPS:应用界面每秒刷新次数,衡量应用画面的流畅度,FPS 越高表示图像流畅度越好,用户体验也越好。
- POWER:每秒读取一次设备节点下的电流及电压信息。
- TEMP:每秒读取一次设备节点下电池温度、系统芯片温度等信息。
- RAM:每秒读取一次应用进程的实际物理内存,衡量应用的内存占比情况。
- snapshot:每秒截取一张应用界面截图。
1 | $ hdc shell |
执行查看帮助命令
1 | SP_daemon --help |
基于hdc
命令行的SmartPerf
性能工具使用详细文档参考这个:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/application-test/smartperf-guidelines.md
实例
HarmonyOS - HDC命令与ADB命令使用对比
HDC与ADB常用命令对比
HDC | ADB | 说明 |
---|---|---|
hdc -h | adb –help | 查看帮助 |
hdc -v | adb –version | 查看版本 |
hdc list targets | adb devices | 查看连接设备 |
hdc kill | adb kill-server | 结束服务 |
hdc kill -r | adb start-server | 启动服务 |
hdc app install [安装包路径] | adb install [安装包路径] | 安装应用 |
hdc app uninstall package | adb uninstall package | 卸载应用 |
hdc hilog | adb logcat | 抓取log |
hdc shell hilogcat >log.log | adb shell logcat >log.log | 抓取log并保存 |
hdc shell reboot | adb reboot | 重启设备 |
hdc shell bm get -u | adb shell bm get -u | 获取UUID |
hdc file recv REMOTE… LOCAL | adb pull REMOTE… LOCAL | 接收文件 REMOTE:手机 LOCAL:PC |
hdc file send LOCAL… REMOTE | adb push LOCAL… REMOTE | 发送文件 |
hdc shell screencap filename | adb shell screencap filename | 截屏 |
hdc shell screenrecord filename | adb shell screenrecord filename | 录屏 |
获取UUID
1 | hdc shell bm get -u > uuid.log |
获取hilog日志
1 | hdc hilog |
抓取log并保存
1 | hdc shell hilogcat >log.log |
获取当前页面信息
1 | @echo off &color 02 &PUSHD %~DP0 &TITLE 获取当前鸿蒙页面 |
启动应用
1 | ::获取bundleName |
命令行安装app的脚本install.sh
使用 DevEco Studio 创建一个工程,然后一个 basic的hsp 和 login的har,让entry依赖这两个mudule,运行,看看执行了哪些命令:
1 | build task in 1 s 364 ms |
1 | hdc shell aa force-stop hmos.com.xm597.app |
替换其中的bundleName
和entryAbility
的值
执行 ./install.sh [包的路径]
1 |
|
1 |
|