• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# hdc
2
3hdc(OpenHarmony Device Connector)是为开发人员提供的用于调试的命令行工具,通过该工具可以在windows/linux/mac系统上与真实设备进行交互。
4
5## 环境准备
6
7hdc工具通过OpenHarmony SDK获取,存放于SDK的toolchains目录下,首次使用按照如下提示配置环境变量。
8
9### 配置环境变量HDC_SERVER_PORT
10
11**Windows环境变量设置方法**
12
13在**此电脑 > 属性 > 高级系统设置 > 高级 > 环境变量**中,添加HDC端口变量名为:HDC_SERVER_PORT,变量值可设置为任意未被占用的端口,如7035。
14
15![新建系统变量](figures/hdc_image_001.PNG)
16
17环境变量配置完成后,关闭并重启DevEco Studio。
18
19**macOS环境变量设置方法**
20
211. 打开终端工具,执行以下命令,根据输出结果分别执行不同命令。
22
23   ```shell
24   echo $SHELL
25   ```
26
27   - 如输出结果为/bin/bash,则执行以下命令,打开.bash_profile文件。
28
29      ```shell
30      vi ~/.bash_profile
31      ```
32
33   - 如输出结果为/bin/zsh,则执行以下命令,打开.zshrc文件。
34
35      ```shell
36      vi ~/.zshrc
37      ```
38
392. 单击字母“i”,进入**Insert**模式。
403. 输入以下内容,在PATH路径下添加HDC_SERVER_PORT端口信息。
41
42   ```shell
43   HDC_SERVER_PORT=7035
44   launchctl setenv HDC_SERVER_PORT $HDC_SERVER_PORT
45   export HDC_SERVER_PORT
46   ```
47
484. 编辑完成后,单击**Esc**键,退出编辑模式,然后输入“:wq”,单击**Enter**键保存。
495. 执行以下命令,使配置的环境变量生效。
50
51   - 如果步骤1时打开的是.bash_profile文件,请执行如下命令:
52
53      ```shell
54      source ~/.bash_profile
55      ```
56
57   - 如果步骤1时打开的是.zshrc文件,请执行如下命令:
58
59      ```shell
60      source ~/.zshrc
61      ```
62
636. 环境变量配置完成后,关闭并重启DevEco Studio。
64
65### (可选)配置全局环境变量
66
67> **说明:**
68> 如未配置全局环境变量,开发者可通过命令行进入SDK的toolchains目录,在目录中执行hdc相关命令进行调试。
69
70**Windows环境变量设置方法**
71
72在**此电脑 > 属性 > 高级系统设置 > 高级 > 环境变量 > 系统变量**中,将SDK的toolchains完整路径添加到Path变量值中,具体路径信息以SDK**实际配置路径**为准。
73
74以下图示内容以本地SDK的toolchains完整路径_/User/username/sdk/openharmony/10/toolchains_为例:
75
76![系统变量](figures/hdc_img_002.PNG)
77
78![编辑环境变量](figures/hdc_image_003.PNG)
79
80**Linux/macOS环境变量设置方法**
81
821. 打开终端工具,执行以下命令,根据输出结果分别执行不同命令。
83
84   ```shell
85   echo $SHELL
86   ```
87
88   - 如输出结果为/bin/bash,则执行以下命令,打开.bash_profile文件。
89
90      ```shell
91      vi ~/.bash_profile
92      ```
93
94   - 如输出结果为/bin/zsh,则执行以下命令,打开.zshrc文件。
95
96      ```shell
97      vi ~/.zshrc
98      ```
99
1002. 单击字母“i”,进入**Insert**模式。
101
1023. 输入以下内容,在PATH路径下**增加**SDK路径信息,具体路径信息以SDK**实际配置路径**为准。
103
104   以下内容以本地SDK的toolchains完整路径_/User/username/sdk/openharmony/10/toolchains_为例:
105
106   ```shell
107   HDC_SDK_PATH=/User/username/sdk/openharmony/10/toolchains
108   launchctl setenv HDC_SDK_PATH $HDC_SDK_PATH # 仅MacOS需要在此执行,Linux无须执行
109   export PATH=$PATH:$HDC_SDK_PATH
110   ```
111
1124. 编辑完成后,单击**Esc**键,退出编辑模式,然后输入“:wq”,单击**Enter**键保存。
113
1145. 执行以下命令,使配置的环境变量生效。
115
116   - 如果步骤1时打开的是.bash_profile文件,请执行如下命令:
117
118      ```shell
119      source ~/.bash_profile
120      ```
121
122   - 如果步骤1时打开的是.zshrc文件,请执行如下命令:
123
124      ```shell
125      source ~/.zshrc
126      ```
127
128**(Linux可选)开启非root用户USB设备操作权限**
129
130- (临时权限)设置USB设备操作权限最大化
131
132   ```shell
133   sudo chmod -R 777 /dev/bus/usb/
134   ```
135
136- (永久权限)永久修改USB设备权限
137
138   1. 使用lsusb找出USB设备的vendorID和productID。
139
140   2. 创建一个新的udev规则。
141
142      编辑udev加载规则,用设备的“idVendor”和“idProduct”来替换默认值。
143
144      MODE="0666"来表示USB设备的权限GROUP;GROUP代表用户组,要确保此时登录的系统用户在该用户组中:
145
146        ```shell
147        sudo vim /etc/udev/rules.d/90-myusb.rules
148        SUBSYSTEMS=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", GROUP="users", MODE="0666"
149        ```
150
151   3. 重启电脑或重新加载udev规则:
152
153        ```shell
154        sudo udevadm control --reload
155        ```
156
157> **注意:**
158> **开启非root用户USB设备操作权限**可以解决Linux环境在非root权限下使用hdc无法找到设备的情况,但权限最大化**可能存在潜在安全问题**,请开发者根据使用场景自行评估是否开启。
159
160## 注意事项
161
162- 使用hdc时如出现异常,可尝试通过hdc kill -r命令杀掉异常进程并重启hdc服务。
163
164- 如出现hdc list targets获取不到设备信息的情况,可通过任务管理器查看是否有hdc进程存在。若进程存在,则通过hdc kill -r命令杀掉该进程并重启hdc服务。
165
166> **说明:**
167>
168> - 命令行中被[]修饰的参数表示可选参数。
169> - 命令行中的参数若是斜体,表示在使用时该参数需替换为具体的信息,例如:file send _local remote_命令中的local和remote,使用时需替换为本地待发送和远端待接收的文件路径。
170
171## 开发指导
172
173### 全局option相关命令
174
175| Option | 说明 |
176| -------- | -------- |
177| -t [key] [command] | 指定连接唯一标识的目标设备。标识可通过命令hdc list targets查询。 |
178| help/-h | 打印hdc帮助信息。 |
179| version/-v | 打印hdc版本信息。 |
180| -l [level] | 指定运行时日志等级,默认为LOG_INFO。 |
181| checkserver | 获取client-server版本。 |
182
1831. 显示hdc相关的帮助信息,命令格式如下:
184
185   ```shell
186   hdc -h
187   ```
188
189   **返回值:**
190   | 返回值 | 说明 |
191   | -------- | -------- |
192   | OpenHarmony device connector(HDC) ...<br/>---------------------------------global commands:----------------------------------<br/>-h/help [verbose]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- Print hdc help, 'verbose' for more other cmds<br/>..._(此处省略详细帮助信息)_ | hdc命令使用帮助信息 |
193
194   **使用方法:**
195
196   ```shell
197   hdc -h
198   ```
199
2002. 显示hdc的版本信息,命令格式如下:
201
202   ```shell
203   hdc -v
204   ```
205
206   **返回值:**
207   | 返回值 | 说明 |
208   | -------- | -------- |
209   | Ver: X.X.Xa | hdc(SDK)的版本信息 |
210
211   **使用方法:**
212
213   ```shell
214   hdc -v
215   ```
216
2173. 连接设备时,若仅有一台,无需指定设备标识;若有多台,一次仅能连接一台,每次连接时需要指定连接设备的标识,命令格式如下:
218
219   ```shell
220   hdc-t [key] [command]
221   ```
222
223   **参数:**
224   | 参数名 | 说明 |
225   | -------- | -------- |
226   | key | IP地址或USB序列号。 |
227   | command | hdc支持的命令。 |
228
229   **返回值:**
230   | 返回值 | 说明 |
231   | -------- | -------- |
232   | 命令执行返回内容 | 请参考对应命令的返回值 |
233   | [Fail]Not match target founded, check connect-key please | 连接的设备不存在 |
234   | [Fail]ExecuteCommand need connect-key? | 连接的设备不存在 |
235   | Unknown operation command... | 不支持的命令 |
236
237   **使用方法**:
238
239   该方法需要与具体的操作命令搭配使用,下面以shell命令举例:
240
241   ```shell
242   hdc list targets  // 获取设备信息
243   hdc -t [key] shell // -t后面添加的key需要替换为查询到的某一个设备信息,此处COMMAND命令为shell即进入调试命令行
244   ```
245
246   > **说明:**
247   > 一台用于开发的电脑可连接多个设备,每个设备有唯一的标识。如果通过网络连接设备,标识为IP地址;如果通过usb连接,标识为USB序列号。该命令需要跟随具体的操作命令。
248
2494. 指定运行时日志等级,默认为LOG_INFO,命令格式如下:
250
251   ```shell
252   hdc -l [level] [command]
253   ```
254
255   **参数:**
256   | 参数 | 说明 |
257   | -------- | -------- |
258   | [level] | 指定运行时日志等级<br/>0:LOG_OFF<br/>1:LOG_FATAL<br/>2:LOG_WARN<br/>3:LOG_INFO<br/>4:LOG_DEBUG<br/>5:LOG_ALL |
259   | command | hdc支持的命令 |
260
261   **返回值:**
262   | 返回值 | 说明 |
263   | -------- | -------- |
264   | 命令执行返回内容 | 请参考对应命令的返回值 |
265   | LOG日志信息 | 对应指定的运行时等级日志打印 |
266
267   **使用方法:**
268
269   ```shell
270   hdc -l 5 shell ls
271   ```
272
2735. 获取client-server版本,命令格式如下:
274
275   ```shell
276   hdc checkserver
277   ```
278
279   **返回值:**
280   | 返回值 | 说明 |
281   | -------- | -------- |
282   | Client version: Ver: X.X.Xa, server version: Ver: X.X.Xa | client-server版本号 |
283
284   **使用方法:**
285
286   ```shell
287   hdc checkserver
288   ```
289
290### 查询设备列表相关命令
291
292| 命令 | 说明 |
293| -------- | -------- |
294| list targets [-v] | 查询已连接的所有目标设备,添加-v选项,则会打印设备详细信息。 |
295
296显示所有已连接的设备列表,命令格式如下:
297
298```shell
299hdc list targets[-v]
300```
301
302**返回值:**
303| 返回值 | 说明 |
304| -------- | -------- |
305| 设备信息 | 已连接的设备列表信息 |
306| [Empty] | 没有查询到设备信息 |
307
308**使用方法:**
309
310```shell
311hdc list targets
312hdc list targets -v
313```
314
315### 服务进程相关命令
316
317| 命令 | 说明 |
318| -------- | -------- |
319| target mount | 读写模式挂载系统分区。(user不可用) |
320| target boot | 重启目标设备,查看目标列表可用list targets命令。 |
321| smode [-r] | 授予设备端hdc后台服务进程root权限, 使用-r参数取消授权。(user不可用) |
322| kill [-r] | 终止hdc服务进程,使用-r参数触发服务进程重新启动。 |
323| start [-r] | 启动hdc服务进程,使用-r参数触发服务进程重新启动。 |
324
3251. 以读写模式挂载系统分区,命令格式如下:
326
327   ```shell
328   hdc target mount
329   ```
330
331   **返回值:**
332   | 返回值 | 说明 |
333   | -------- | -------- |
334   | Mount finish | 挂载成功 |
335   | [Fail]具体失败信息 | 挂载失败 |
336
337   **使用方法:**
338
339   ```shell
340   hdc target mount
341   ```
342
3432. 授予设备端hdc后台服务进程root权限,命令格式如下:
344
345   ```shell
346   hdc smode [-r]
347   ```
348
349   **返回值:**
350   | 返回值 | 说明 |
351   | -------- | -------- |
352   | 无返回值 | 授予权限成功 |
353   | [Fail]具体失败信息 | 授予权限失败 |
354
355   **使用方法:**
356
357   ```shell
358   hdc smode
359   hdc smode -r  // 取消root权限
360   ```
361
3623. 终止hdc服务进程,命令格式如下:
363
364   ```shell
365   hdc kill [-r]
366   ```
367
368   **返回值:**
369   | 返回值 | 说明 |
370   | -------- | -------- |
371   | Kill server finish | 服务进程终止成功 |
372   | [Fail]具体失败信息 | 服务进程终止失败 |
373
374   **使用方法:**
375
376   ```shell
377   hdc kill
378   hdc kill -r  // 重启并终止服务进程
379   ```
380
3814. 启动hdc服务进程,命令格式如下:
382
383   ```shell
384   hdc start [-r]
385   ```
386
387   **返回值:**
388   | 返回值 | 说明 |
389   | -------- | -------- |
390   | 无返回值 | 服务进程启动成功 |
391   | [Fail]具体失败信息 | 服务进程启动失败 |
392
393   **使用方法:**
394
395   ```shell
396   hdc start
397   hdc start -r // 服务进程启动状态下,触发服务进程重新启动
398   ```
399
400### 网络相关命令
401
402| 命令 | 说明 |
403| -------- | -------- |
404| fport ls | 列出全部转发端口转发任务。 |
405| fport _local remote_ | 设置正向端口转发任务:监听“主机端口”,接收请求并进行转发, 转发到“设备端口”。 |
406| fport rm _local__remote_ | 删除正向端口转发任务:取消指定的“主机端口”转发。 |
407| rport _remote local_ | 设置反向端口转发任务:监听“设备端口”,接收请求并进行转发,转发到“主机端口”。 |
408| rport rm _remote local_ | 删除反向端口转发任务:取消指定的“设备端口”转发。 |
409| tmode usb | 已连接设备切换为USB连接方式:设备端daemon进程重启,并首先选用USB连接方式。 |
410| tmode port [port-number] | 已连接设备切换为网络连接方式:设备端daemon进程重启,并优先使用网络方式连接设备,如果连接设备失败,再选择USB连接。 |
411| tconn_ host_[:port] [-remove] | 指定连接设备:通过“IP地址:端口号”来指定连接的设备,使用-remove参数断开连接。 |
412
4131. 列出全部转发端口转发任务,命令格式如下:
414
415   ```shell
416   hdc fport ls
417   ```
418
419   **返回值:**
420   | 返回值 | 说明 |
421   | -------- | -------- |
422   | 'tcp:1234 tcp:1080' [Forward] | 正向端口转发任务。 |
423   | 'tcp:2080 tcp:2345' [Reverse] | 反向端口转发任务。 |
424   | [empty] | 无端口转发任务。 |
425
426   **使用方法:**
427
428   ```shell
429   hdc fport ls
430   ```
431
4322. 设置正向端口转发任务,执行后将设置指定的“主机端口”转发数据到“设备端口”转发任务,命令格式如下:
433
434   ```shell
435   hdc fport local remote
436   ```
437
438   **返回值:**
439   | 返回值 | 说明 |
440   | -------- | -------- |
441   | Forwardport result:OK | 端口转发任务设置正常。 |
442   | [Fail]Incorrect forward command | 端口转发任务设置失败,端口转发参数错误。 |
443   | [Fail]TCP Port listen failed at XXXX | 端口转发任务设置失败,本地转发端口被占用。 |
444
445   **使用方法:**
446
447   ```shell
448   hdc fport tcp:1234 tcp:1080
449   ```
450
4513. 删除正向端口转发任务,执行后将指定的“主机端口”转发数据到“设备端口”转发任务删除,命令格式如下:
452
453   ```shell
454   hdc fport rm localremote
455   ```
456
457   **返回值:**
458   | 返回值 | 说明 |
459   | -------- | -------- |
460   | Remove forward ruler success, ruler:tcp:XXXX tcp:XXXX | 端口转发任务删除正常。 |
461   | [Fail]Remove forward ruler failed, ruler is not exist tcp:XXXX tcp:XXXX | 端口转发任务删除失败,不存在指定的转发任务。 |
462
463   **使用方法:**
464
465   ```shell
466   hdc fport rm tcp:1234 tcp:1080
467   ```
468
4694. 设置反向端口转发任务,执行后将设置指定的“设备端口”转发数据到“主机端口”转发任务,命令格式如下:
470
471   ```shell
472   hdc rport remote local
473   ```
474
475   **返回值:**
476   | 返回值 | 说明 |
477   | -------- | -------- |
478   | Forwardport result:OK | 端口转发任务设置正常。 |
479   | [Fail]Incorrect forward command | 端口转发任务设置失败,端口转发参数错误。 |
480   | [Fail]TCP Port listen failed at XXXX | 端口转发任务设置失败,本地转发端口被占用。 |
481
482   **使用方法:**
483
484   ```shell
485   hdc rport tcp:1234 tcp:1080
486   ```
487
4885. 删除反向端口转发任务,执行后将指定的“设备端口”转发数据到“主机端口”任务删除,命令格式如下:
489
490   ```shell
491   hdc rport rm remote local
492   ```
493
494   **返回值:**
495   | 返回值 | 说明 |
496   | -------- | -------- |
497   | Remove forward ruler success, ruler:tcp:XXXX tcp:XXXX | 端口转发任务删除正常。 |
498   | [Fail]Remove forward ruler failed, ruler is not exist tcp:XXXX tcp:XXXX | 端口转发任务删除失败,不存在对应的转发任务。 |
499
500   **使用方法:**
501
502   ```shell
503   hdc rport rm tcp:1234 tcp:1080
504   ```
505
5066. 已连接设备切换为USB连接方式,命令格式如下:
507
508   ```shell
509   hdc tmode usb
510   ```
511
512   **返回值:**
513   | 返回值 | 说明 |
514   | -------- | -------- |
515   | 无 | 切换成功。 |
516   | [Fail]ExecuteCommand need connect-key | 设备列表无网络连接方式设备,无法指定设备切换连接方式。 |
517
518   **使用方法:**
519
520   ```shell
521   hdc tmode usb
522   ```
523
5247. 已连接设备切换为网络连接方式,命令格式如下:
525
526   ```shell
527   hdc tmode port [port-number]
528   ```
529
530   **参数:**
531   | 参数 | 参数说明 |
532   | -------- | -------- |
533   | port-number | 监听连接的网络端口号,范围:1~65536。 |
534
535   **返回值:**
536   | 返回值 | 说明 |
537   | -------- | -------- |
538   | 无 | 切换成功。 |
539   | [Fail]ExecuteCommand need connect-key | 切换失败,设备列表无设备,无法指定设备切换连接方式。 |
540   | [Fail]Incorrect port range | 端口号超出可设置范围(1~65536)。 |
541
542   **使用方法:**
543
544   ```shell
545   hdc tmode port 1234
546   ```
547
548   > **注意:**
549   > 切换前,请确保条件满足:远端设备与近端执行机处于同一网络,且执行机可ping通远端设备IP。
550   >
551   > 如不满足以上条件请勿使用该命令进行切换。
552
553   > **说明:**
554   > 执行完毕后,远端daemon将会退出并重启,USB连接将会断开,默认启用TCP连接,且仅可通过TCP进行连接,如需恢复USB连接有以下两种方法:
555   >
556   > (1)执行hdc tconn [ip]:[port]命令进行TCP连接后,执行hdc tmode usb恢复。
557   >
558   > (2)通过恢复出厂设置恢复。
559
5608. 指定连接的设备,命令格式如下:
561
562   ```shell
563   hdc tconn host[:port] [-remove]
564   ```
565
566   **参数:**
567   | 参数 | 参数说明 |
568   | -------- | -------- |
569   | host[:port] | 设备IP地址与端口号,格式按照“IP地址:端口号“。 |
570   | -remove | 【可选】断开指定设备的连接。 |
571
572   **返回值:**
573   | 返回值 | 说明 |
574   | -------- | -------- |
575   | Connect OK | 连接成功。 |
576   | [Info]Target is connected, repeat opration | 设备当前已连接。 |
577   | [Fail]Connect failed | 连接失败。 |
578
579   **使用方法:**
580
581   ```shell
582   hdc tconn 192.168.0.1:8888
583   hdc tconn 192.168.0.1:8888 -remove  // 断开指定网络设备连接
584   ```
585
586### 文件相关命令
587
588| 命令 | 说明 |
589| -------- | -------- |
590| file send _local remote_ | 从本地发送文件至远端设备。 |
591| file recv _remote local_ | 从远端设备发送文件至本地。 |
592
5931. 从本地发送文件至远端设备,命令格式如下:
594
595   ```shell
596   hdc file send local remote
597   ```
598
599   **参数:**
600   | 参数名 | 说明 |
601   | -------- | -------- |
602   | local | 本地待发送的文件路径。 |
603   | remote | 远程待接收的文件路径。 |
604
605   **返回值:**
606
607   文件发送成功,返回传输成功的结果信息。文件发送失败,返回传输失败的具体信息。
608
609   **使用方法:**
610
611   ```shell
612   hdc file send E:\example.txt /data/local/tmp/example.txt
613   ```
614
6152. 从远端设备发送文件至本地,命令格式如下:
616
617   ```shell
618   hdc file recv remote local
619   ```
620
621   **参数:**
622   | 参数名 | 说明 |
623   | -------- | -------- |
624   | local | 本地待接收的文件路径。 |
625   | remote | 远程待发送的文件路径。 |
626
627   **返回值:**
628
629   文件接收成功,返回传输成功的结果信息。文件接收失败,返回传输失败的具体信息。
630
631   **使用方法:**
632
633   ```shell
634   hdc file recv  /data/local/tmp/a.txt   ./a.txt
635   ```
636
637### 应用相关命令
638
639| 命令 | 说明 |
640| -------- | -------- |
641| install [-r/-d/-g] _packageFile_ | 安装指定的应用package文件。 |
642| uninstall_ packageName_ | 卸载指定的应用包package包名。 |
643
6441. 安装APP package,命令格式如下:
645
646   ```shell
647   hdc install [-r/-d/-g] packageFile
648   ```
649
650   **参数:**
651   | 参数名 | 说明 |
652   | -------- | -------- |
653   | packageFile | 应用安装包文件名。 |
654   | -r | 替换已存在应用。 |
655   | -d | 允许降级安装。 |
656   | -g | 应用动态授权。 |
657
658   **返回值:**
659   | 返回值 | 说明 |
660   | -------- | -------- |
661   | 无 | 成功情况下无返回值。 |
662   | 具体安装失败原因 | 失败情况下返回具体安装失败信息。 |
663
664   **使用方法:**
665
666   以安装com.example.hello包为例:
667
668   ```shell
669   hdc install E:\com.example.hello.hap
670   ```
671
6722. 卸载应用,命令格式如下:
673
674   ```shell
675   hdc uninstall [-k] packageName
676   ```
677
678   **参数:**
679   | 参数名 | 说明 |
680   | -------- | -------- |
681   | packageName | 应用安装包。 |
682   | -k | 保留/data/cache。 |
683
684   **返回值:**
685   | 返回值 | 说明 |
686   | -------- | -------- |
687   | 无 | 成功情况下无返回值。 |
688   | 具体卸载失败原因 | 失败情况下返回具体卸载失败信息。 |
689
690   **使用方法:**
691
692   以卸载com.example.hello包为例:
693
694   ```shell
695   hdc uninstall com.example.hello
696   ```
697
698### 调试相关命令
699
700| 命令 | 说明 |
701| -------- | -------- |
702| jpid | 显示可调试应用列表。 |
703| hilog [options] | 打印设备端的日志信息,options表示hilog支持的参数,可通过hdc hilog -h查阅支持的参数列表 。 |
704| shell [COMMAND] | 交互命令,COMMAND表示需要执行的单次命令。不同类型或版本的系统支持的COMMAND命令有所差异,可以通过hdc shell ls /system/bin查阅支持的命令列表。 |
705
7061. 抓取log信息,命令格式如下:
707
708   ```shell
709   hdc hilog[options]
710   ```
711
712   **参数:**
713   | 参数 | 说明 |
714   | -------- | -------- |
715   | [options] | hilog支持的参数,可通过hdc hilog -h查阅支持的参数列表。 |
716
717   **返回值:**
718   | 返回值 | 说明 |
719   | -------- | -------- |
720   | 返回具体信息 | 抓取的日志信息。 |
721
722   **使用方法:**
723
724   ```shell
725   hdc hilog
726   hdc shell "hilog -r" // 清理hilog缓存日志
727   ```
728
7292. 显示可调试应用列表,命令格式如下:
730
731   ```shell
732   hdc jpid
733   ```
734
735   **返回值:**
736   | 返回值 | 说明 |
737   | -------- | -------- |
738   | 应用名列表 | 可调试应用名列表。 |
739   | [empty] | 无可调式应用。 |
740
741   **使用方法:**
742
743   ```shell
744   hdc jpid
745   ```
746
7473. 交互命令,命令格式如下:
748
749   ```shell
750   hdc shell [COMMAND]
751   ```
752
753   **参数:**
754   | 参数 | 说明 |
755   | -------- | -------- |
756   | [COMMAND] | 调试命令行可用命令,详细可用命令help来获取全部命令提示。 |
757
758   **返回值:**
759   | 返回值 | 说明 |
760   | -------- | -------- |
761   | 交互命令返回内容 | 返回内容详情请参见其他交互命令返回内容。 |
762   | /bin/sh: XXX : inaccessible or not found | 不支持的交互命令。 |
763
764   **使用方法:**
765
766   ```shell
767   hdc shell ps -ef
768   hdc shell help -a // 查询全部可用命令
769   ```
770
771## 常见场景
772
773### USB连接场景
774
775**环境确认**
776| 确认项 | 正常 | 异常处理 |
777| -------- | -------- | -------- |
778| USB调试选项 | 开启 | 设备的USB调试模式如无法自动开启,请尝试重启设备。 |
779| USB数据连接线 | 使用USB数据连接线连接到调试PC的USB接口。 | 如使用低带宽、无数据通信功能的USB连接线可能导致无法识别HDC设备,建议更换官方USB数据连接线。 |
780| USB接口 | 主板直出USB接口(台式机为后面板的USB接口,笔记本为机身的USB接口) | 如使用转接头/拓展坞/台式机前面板USB接口,存在带宽低和USB同步异常等问题,会导致频繁断连,推荐使用直连方式连接PC和设备。 |
781| hdc环境变量 | 终端命令行输入hdc -h有回显帮助信息内容。 | 参见环境准备章节。 |
782| 驱动 | 连接HDC设备后,设备管理器通用串行总线设备存在设备"HDC Device"或"HDC Interface" | 请安装驱动。 |
783
784**连接步骤**
785
786```shell
787hdc shell //USB直连需要确认设备非处在tcp连接模式,直接连接即可。
788```
789
790### TCP连接场景
791
792**环境确认**
793| 确认项 | 正常 | 异常处理 |
794| -------- | -------- | -------- |
795| 网络连接 | PC、手机设备处于同一网络。 | 连接同一WiFi或手机开启热点。 |
796| 网络状态 | telnet ip:port正常,网速稳定。 | 请选择稳定的网络连接方式。 |
797| hdc环境变量 | 终端命令行输入hdc -h有回显帮助信息内容。 | 参见环境准备章节。 |
798
799**连接步骤**
800
8011. PC通过USB连接设备。
802
8032. 设置亮屏幕,执行以下命令:
804
805   ```shell
806   hdc shell “power-shell setmode 602”
807   ```
808
809   保持亮屏状态,避免熄屏导致 wifi断掉;如果此时设备断连,需要重新较快输入tconn连接指令
810
8113. 将设备通过USB模式切换至tcp模式,执行以下命令:
812
813   ```shell
814   hdc tmode port 8710//port 后加指定端口号(可自行设置)
815   ```
816
8174. 通过tcp连接设备(需要事先知道设备IP),执行以下命令:
818
819   ```shell
820   hdc tconn ip:8710
821   ```
822
823   ip可在手机查看设备侧的ip地址,端口号为上一步指定的,默认值为8710。
824
8255. 查看已连接设备,执行以下命令:
826
827   ```shell
828   hdc list targets
829   ```
830
831   返回值为ip:port形式即为连接成功,单台设备可以正常使用hdc命令,多台设备需要-t指定设备使用hdc命令。
832
8336. (可选)TCP模式切换回USB模式,在已连接TCP模式状态下,执行以下命令:
834
835   ```shell
836   hdc tmode usb
837   ```
838
839   切换后将恢复USB模式。
840
841### 远程连接场景
842
843远程连接结构如图所示。
844
845![远程连接结构图](figures/hdc_image_004.PNG)
846
847**服务端配置**
848
849服务端通过USB连接到对应的HDC设备后执行以下命令:
850
851```shell
852hdc kill          // 关闭本地hdc服务
853hdc -s ip:8710 -m // 启动网络转发的hdc服务
854                  // 其中ip为服务端自身的IP,windows可通过ipconfig查询,unix系统可通过ifconfig查询
855                  // 8710为默认端口号,也可设置为其他端口号如:18710
856                  // 启动后服务端将打印日志
857```
858
859**客户端连接**
860
861客户端连接需要确保可以连通服务端IP地址,满足前述条件后执行以下命令:
862```shell
863hdc -s ip:8710 [command] // 其中ip为服务端IP,
864                         // command可以为任意hdc可用命令,例如list targets
865```
866
867### 日志获取场景
868
869**server端日志**
870
871执行以下命令开启日志获取:
872
873```shell
874hdc kill ​
875hdc -l5 start
876```
877
878收集到的完整日志存放路径:
879
880| 平台 | 路径 | 备注 |
881| -------- | -------- | -------- |
882| Windows | %temp%\hdc.log | 实际路径参考,实际使用请替换用户名变量<br/>C:\Users\用户名\AppData\Local\Temp\hdc.log<br/>**说明:**<br/>Windows的文件路径使用反斜线“\”。 |
883| Linux | /tmp/hdc.log | - |
884| MacOS | $TMPDIR/hdc.log | - |
885
886**设备端日志**
887
888开启hilog日志工具,获取对应日志,命令如下:
889
890```shell
891hdc shell hilog -w start                              // 开启hilog日志落盘
892hdc shell ls /data/log/hilog                          // 查看已落盘hilog日志
893hdc file recv /data/log/hilog                         // 获取hilog已落盘日志(包含内核日志)
894```
895
896## 常见问题
897
898### 设备无法识别
899
900**现象描述**
901
902命令行执行`hdc list targets`命令后,返回结果为`[empty]`。
903
904可通过以下方式排查。
905
906- 情况一:查看设备管理是否显示HDC设备。
907
908  Windows环境:
909
910  在`设备管理器`>`通用串行总线设备`中是否显示`HDC Device`(单一端口设备)或`HDC Interface`(复合端口设备)。
911
912  Linux环境:
913
914  在命令行执行`lsusb`,在返回的内容中查看是否有`HDC Device`(单一端口设备)或`HDC Interface`(复合端口设备)。
915
916  MacOS环境:
917
918  使用`系统信息`或`系统概述`来查看USB设备,步骤如下:
919
920  1. 按住键盘上的Option键,点按菜单。
921
922  2. 选取`系统信息`或`系统概述`。
923
924  3. 在随后出现的窗口中,选择左边的`USB`。
925
926  4. 在随后显示的设备树查看是否有`HDC Device`(单一端口设备)或`HDC Interface`(复合端口设备)。
927
928  **可采取的解决方法**
929
930  以上环境如没有显示HDC设备,则说明无法识别设备,可以根据实际场景尝试以下方法:
931
932  - 使用其他USB物理接口。
933  - 更换USB数据连接线。
934  - 使用其他计算机调试。
935  - 设备开启USB调试模式。
936  - 设备出现弹窗点击允许调试。
937  - 如可通过TCP模式连接,可执行`hdc tmode usb`命令恢复USB连接。
938  - 设备恢复出厂设备。
939
940- 情况二:存在USB设备,但是驱动损坏,显示"HDC Device"⚠警告图标。
941
942  现象描述:该问题常见于Windows环境,现象为`设备管理器`>`通用串行总线设备`中,`HDC Device`显示为黄标警告,且描述信息为该设备无法正常工作。可尝试重新安装驱动解决,如重新安装驱动无法解决,可以尝试更换USB连接数据线/拓展坞/USB接口。
943
944  **重新安装驱动的方法**
945
946  1. 打开`设备管理器`,右键点击存在警告图标的`HDC Device`;
947
948  2. 出现的菜单中点击`更新驱动程序`;
949
950  3. 出现的提示窗口(第1/3个)中,选取`浏览我的电脑以查找驱动程序`;
951
952  4. 出现的提示窗口(第2/3个)中,选取`让我从计算机上的可用驱动程序列表中选取`;
953
954  5. 出现的提示窗口(第3/3个)中,取消勾选`显示兼容硬件`,选择厂商:`WinUSB设备`,选择型号:`WinUSB设备`,选择完成后点击`下一步`按钮。
955
956- 情况三:连接设备时出现`[Fail]Failed to communicate with daemon`。
957
958  现象描述:命令行执行hdc相关命令,执行失败返回`[Fail]Failed to communicate with daemon`。
959
960  可能存在以下原因,可参考排查:
961
962  - hdc SDK与设备不匹配: 如果设备更新到最新版本,可更新hdc(SDK)工具至最新版本。
963  - 端口被占用:
964
965    常见于hdc和hdc_std使用同一端口,同时运行时HDC_SERVER_PORT设置的端口互相冲突(未设置则使用默认端口8710,仍然会冲突),注意只运行其中一个。其他软件占用hdc默认端口也会导致该问题发生。
966
967- 情况四:连接设备时出现`Connect server failed`。
968
969  出现该现象,可能有如下原因:
970
971  - **端口抢占**
972
973    解决方法如下:
974    1. 排查自带hdc的软件进程。
975
976       包括自带hdc的软件(DevEco Studio、DevEco Testing),如存在请关闭这些软件后再执行hdc相关命令。
977
978    2. 查询HDC端口情况。
979
980       以设置的HDC_SERVER_PORT为8710端口为例,在不同平台查询命令如下:
981
982       Unix:
983
984       ```shell
985       netstat -an |grep 8710
986       ```
987
988       Windows:
989
990       ```shell
991       netstat -an |findstr 8710
992       ```
993
994       如存在抢占的软件,可以关闭该软件进程或者更换HDC_SERVER_PORT环境变量为其他端口号。
995
996    3. 排查未关闭的其他版本hdc server
997
998       Windows:
999
1000       使用`任务管理器`>`详细信息`查询hdc.exe进程,右键打开文件所在位置,核对位置是否为配置的环境变量中的hdc文件位置,如果不一致,可尝试结束hdc.exe进程(hdc kill或者任务管理器直接结束进程)并重新执行hdc命令。(关闭hdc server后执行hdc命令会重新启动hdc server)
1001
1002       Unix:
1003
1004       使用`ps -ef |grep hdc`查询hdc后台server进程,核对进程启动位置是否为配置的环境变量中的hdc文件位置,如果不一致,可尝试结束hdc进程(hdc kill或者kill -9 hdc进程的PID)并重新执行hdc命令。(关闭hdc server后执行hdc命令会重新启动hdc server)
1005
1006  - **注册表异常**
1007
1008    解决方法:清理注册表,步骤如下:
1009
1010    1. 同时按下`Win`+`R`键,启动运行工具,输入栏输入`regedit`打开注册表。
1011    2. 注册表地址栏输入以下内容并按下`回车`,即可进入USB类设备驱动程序的注册表。
1012
1013       ```shell
1014       计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{88bae032-5a81-49f0-bc3d-a4ff138216d6}
1015       ```
1016
1017    3. 找到`UpperFilters`键,右键`修改`编辑,**备份**并清空其中数值数据内容(如清空后无法解决问题可依照备份恢复)。
1018    4. 刷新设备管理器/插拔USB接口/重启计算机。
1019
1020### hdc无法运行
1021
1022**现象描述**
1023
1024使用命令行执行hdc.exe/hdc 二进制文件无法运行。
1025
1026**可能原因&解决方法**
1027
1028- 运行环境异常
1029
1030  Linux运行环境:建议使用Ubuntu18.04及以上64版本,如发送libc++.so引用错误请使用ldd/readelf等命令检查库引用。
1031
1032  MacOS运行环境:建议使用MacOS 11及以上版本。
1033
1034  Windows运行环境:建议使用Windows10/Windows11 64位版本,如低版本缺失WinUSB库/驱动,请使用Zadig工具更新。对于符合设备,需要使用Zadig工具安装libusb-win32驱动。[Zadig链接](https://github.com/pbatard/libwdi/releases)
1035
1036- 运行方式不当:请使用命令行依照正确命令运行hdc工具,而非鼠标双击文件。
1037
1038### 其他问题排查常用步骤
1039
10401. 命令行执行`hdc list targets`查看返回值。
10412. 查看`设备管理`是否有`HDC Device`。
10423. 执行`hdc kill`关闭server后,执行`hdc -l5 start`收集日志(hdc.log位于执行端TEMP目录,不同平台目录位置存在差异,可参考[日志获取场景](#日志获取场景))。
10434. 通过hdc.log日志定位相关问题。
1044