1# aa工具
2
3Ability assistant(Ability助手,简称为aa),是用于启动应用和启动测试用例的工具,为开发者提供基本的应用调试和测试能力,例如启动应用组件、强制停止进程、打印应用组件相关信息等。
4
5## 环境要求
6
7在使用本工具前,开发者需要先获取<!--Del-->[<!--DelEnd-->hdc工具<!--Del-->](../../device-dev/subsystems/subsys-toolchain-hdc-guide.md)<!--DelEnd-->,执行hdc shell。
8
9本文中命令介绍均基于交互式命令环境。如果直接执行hdc shell [aa命令],则需要采用""来包裹aa命令,确保命令中的传参能被正确识别。示例如下:
10
11```bash
12# 启动命令
13hdc shell "aa start -A ohos.want.action.viewData -U 'https://www.example.com'"
14
15# 应用调试/调优命令
16hdc shell "aa process -b com.example.myapplication -a EntryAbility -p perf-cmd"
17```
18
19## aa工具命令列表
20
21| 命令 | 描述 |
22|--------|--------|
23| -h/help | 帮助命令。用于查询aa支持的命令信息。|
24| start | 启动命令。用于启动一个应用组件,目标组件可以是FA模型的PageAbility和ServiceAbility组件,也可以是Stage模型的UIAbility和ServiceExtensionAbility组件,且目标组件相应配置文件中的exported标签不能配置为false。|
25| stop-service | 停止命令。用于停止ServiceAbility。 |
26| dump<sup>(deprecated)</sup> | 打印命令。用于打印应用组件的相关信息。|
27| force-stop | 强制停止进程命令。通过bundleName强制停止一个进程。|
28| test | 启动测试框架命令。根据所携带的参数启动测试框架。 |
29| attach | 进入调试模式命令。通过bundleName使指定应用进入调试模式。|
30| detach | 退出调试模式命令。通过bundleName使指定应用退出调试模式。|
31| appdebug | 等待调试命令。用于设置、取消设置应用等待调试状态,以及获取处于等待调试状态的应用包名和持久化信息。等待调试状态只对debug类型应用生效。appdebug的设置命令只对单个应用生效,当重复设置时,应用包名与持久化状态会替换成最新设置内容。|
32| process | 应用调试/调优命令。对应用进行调试或调优,IDE用该命令集成调试和调优工具。|
33
34## 帮助命令(help)
35
36```bash
37# 显示帮助信息
38aa help
39```
40
41## 启动命令(start)
42
43启动一个应用组件,目标组件可以是FA模型的PageAbility和ServiceAbility组件,也可以是Stage模型的UIAbility和ServiceExtensionAbility组件,且目标组件相应配置文件中的exported标签不能配置为false。
44
45```bash
46# 显示启动Ability
47aa start [-d <deviceId>] [-a <abilityName> -b <bundleName>] [-m <moduleName>] [-D] [-R] [-S] [--pi <key> <integer-value>] [--pb <key> <bool-value: true/false/t/f大小写不敏感] [--ps <key> <value>] [--psn <key>] [--wl <windowLeft>] [--wt <windowTop>] [--wh <windowHeight>] [--ww <windowWidth>] [-p <perf-cmd>]
48
49# 隐式启动Ability。如果命令中的参数都不填,会导致启动失败。
50aa start [-d <deviceId>] [-U <URI>] [-t <type>] [-A <action>] [-e <entity>] [-D] [-R] [--pi <key> <integer-value>] [--pb <key> <bool-value: true/false/t/f大小写不敏感] [--ps <key> <value>] [--psn <key>] [--wl <windowLeft>] [--wt <windowTop>] [--wh <windowHeight>] [--ww <windowWidth>] [-p <perf-cmd>]
51```
52
53  **启动命令参数列表**
54
55  | 参数 | 参数说明              |
56  | -------- |-------------------|
57  | -h/--help | 帮助信息。             |
58  | -d | 可选参数,deviceId。    |
59  | -a | 可选参数,abilityName。 |
60  | -b | 可选参数,bundleName。  |
61  | -m | 可选参数,moduleName。  |
62  | -U | 可选参数,URI。         |
63  | -A | 可选参数,action。      |
64  | -e | 可选参数,entity。      |
65  | -t | 可选参数,type。        |
66  | --pi  | 可选参数,整型类型键值对。     |
67  | --pb  | 可选参数,布尔类型键值对。     |
68  | --ps  | 可选参数,字符串类型键值对。    |
69  | --psn | 可选参数,空字符串关键字。     |
70  | --wl | 可选参数,windowLeft,窗口左边距,单位px。<br>**约束:**<br>仅当2in1设备处于开发者模式下,且被启动应用采用调试签名时,该字段生效。|
71  | --wt | 可选参数,windowTop,窗口上边距,单位px。<br>**约束:**<br>仅当2in1设备处于开发者模式下,且被启动应用采用调试签名时,该字段生效。|
72  | --wh | 可选参数,windowHeight,窗口高度,单位px。<br>**约束:**<br>仅当2in1设备处于开发者模式下,且被启动应用采用调试签名时,该字段生效。|
73  | --ww | 可选参数,windowWidth,窗口宽度,单位px。<br>**约束:**<br>仅当2in1设备处于开发者模式下,且被启动应用采用调试签名时,该字段生效。|
74  | -R | 可选参数,调试时是否开启多线程错误检测。携带该参数代表开启,不携带代表关闭。<br>**说明:** 从API version 14开始,支持该参数。 |
75  | -S | 可选参数,调试时是否进入应用沙箱。携带该参数代表进入,不携带代表不进入。 |
76  | -D | 可选参数,调试模式。        |
77  | -p | 可选参数,调优命令。命令由调用方自定义。        |
78
79  **返回值**:
80
81  当启动成功时,返回"start ability successfully.";当启动失败时,返回"error: failed to start ability.",同时会包含相应的失败信息。
82
83  **示例**:
84
85  以隐式启动Ability为例。
86
87  > **说明:**
88  >
89  > 本例中仅介绍了部分字段的使用。关于Ability匹配的详细规则参考[显式Want与隐式Want匹配规则](../application-models/explicit-implicit-want-mappings.md)。
90
91
92  - **目标应用**:修改module.json5配置,为目标Ability配置uris。
93
94      ```json
95      {
96        "name": "TargetAbility",
97        // ......
98        "exported": true,
99        "skills": [
100          {
101            "actions":[
102              "ohos.want.action.viewData"
103            ],
104            "uris":[
105              {
106                "scheme": "myscheme",
107                "host": "www.test.com",
108                "port": "8080",
109                "path": "path",
110              }
111            ]
112          }
113        ]
114      }
115      ```
116
117
118  - **拉起方应用**: 隐式启动Ability。
119
120    - 如果需要拉起应用的页面,可以使用-U命令,示例如下:
121
122        ```bash
123        aa start -U myscheme://www.test.com:8080/path
124        ```
125
126    - 在上述基础上,如果需要携带参数,可以使用如下命令:
127
128        ```bash
129        aa start -U myscheme://www.test.com:8080/path --pi paramNumber 1 --pb paramBoolean true --ps paramString teststring  --psn paramNullString
130        ```
131
132      UIAbility获取传入参数示例如下:
133
134        ```ts
135        import UIAbility from '@ohos.app.ability.UIAbility';
136        import hilog from '@ohos.hilog';
137        import Want from '@ohos.app.ability.Want';
138
139        export default class TargetAbility extends UIAbility {
140          onCreate(want:Want, launchParam) {
141            hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
142            let paramNumber = want.parameters.paramNumber
143            let paramBoolean = want.parameters.paramBoolean
144            let paramString = want.parameters.paramString
145            let paramNullString = want.parameters.paramNullString
146          }
147        }
148        ```
149
150    - 如果需要拉起浏览器并跳转指定页面,可以使用-A -U命令,示例如下:
151
152      本例中以`https://www.example.com`为例,请根据实际情况替换为真实的网址。
153
154        ```bash
155        aa start -A ohos.want.action.viewData -U https://www.example.com
156        ```
157
158
159## 停止命令(stop-service)
160
161用于停止ServiceAbility。
162
163```bash
164aa stop-service [-d <deviceId>] -a <abilityName> -b <bundleName> [-m <moduleName>]
165```
166
167  **停止命令参数列表**
168  | 参数 | 参数说明 |
169  | -------- | -------- |
170  | -h/--help | 帮助信息。 |
171  | -d | 可选参数,deviceId。 |
172  | -a | 必选参数,abilityName。 |
173  | -b | 必选参数,bundleName。 |
174  | -m | 可选参数,moduleName。 |
175
176  **返回值**:
177
178  当成功停止ServiceAbility时,返回"stop service ability successfully.";当停止失败时,返回"error: failed to stop service ability."。
179
180  **示例**:
181
182  ```bash
183  # 停止一个ServiceAbility
184  aa stop-service -a EntryAbility -b com.example.myapplication -m entry
185  ```
186
187## 打印命令(dump<sup>(deprecated)</sup>)
188
189用于打印应用组件的相关信息。
190
191```bash
192aa dump -a
193```
194
195> **说明:**
196>
197> aa dump命令从API version 7开始支持,从API version 9废弃,替换命令为[hidumper](../dfx/hidumper.md) -s AbilityManagerService。
198
199  **打印命令参数列表**
200  | 参数 | 二级参数 | 参数说明 |
201  | -------- | -------- | -------- |
202  | -h/--help | - | 帮助信息。 |
203  | -a/--all | - | 打印所有mission内的应用组件信息。 |
204  | -l/--mission-list | type(缺省打印全部) | 服务侧为了方便管理任务链,内部维护了4种类型的任务链。<br/>可取值:<br/>-&nbsp;NORMAL:正常启动的任务链(比如A拉起B拉起C, 则对应的任务链是A->B->C)<br/>-&nbsp;DEFAULT_STANDARD:已经被破坏的任务链中的任务, 启动模式为`multiton`的任务被放到该任务链中, 这里面的任务之间没有关联关系<br/>-&nbsp;DEFAULT_SINGLE:已经被破坏的任务链中的任务, 启动模式为`singleton`的任务被放到该任务链中, 这里面的任务之间没有关联关系<br/>-&nbsp;LAUNCHER:launcher的任务链 |
205  | -e/--extension | elementName | 打印扩展组件信息。 |
206  | -u/--userId | UserId | 打印指定UserId的栈信息,需要和其他参数组合使用,例如aa&nbsp;dump&nbsp;-a&nbsp;-u&nbsp;100、aa&nbsp;dump&nbsp;-d&nbsp;-u&nbsp;100。 |
207  | -d/--data | - | 打印DataAbility相关信息。 |
208  | -i/--ability | AbilityRecord&nbsp;ID | 打印指定应用组件详细信息。 |
209  | -c/--client | - | 打印应用组件详细信息,需要和其他参数组合使用,例如aa&nbsp;dump&nbsp;-a&nbsp;-c、aa&nbsp;dump&nbsp;-i&nbsp;21&nbsp;-c。 |
210  | -p/--pending | - | 打印pendingWant信息,需要和其他参数组合使用,例如aa&nbsp;dump&nbsp;-a&nbsp;-p。 |
211  | -r/--process | - | 打印应用进程信息,需要和其他参数组合使用,例如aa&nbsp;dump&nbsp;-a&nbsp;-r。 |
212
213  **示例**:
214
215  ```bash
216  # 打印所有mission内的应用组件信息
217  aa dump -a
218  ```
219
220  ![aa-dump-a](figures/aa-dump-a.png)
221
222
223  ```bash
224  # 打印所有任务链
225  aa dump -l
226  ```
227
228  ![aa-dump-l](figures/aa-dump-l.png)
229
230
231  ```bash
232  # 打印指定应用组件详细信息
233  aa dump -i 12
234  ```
235
236  ![aa-dump-i](figures/aa-dump-i.png)
237
238## 强制停止进程命令(force-stop)
239
240通过bundleName强制停止一个进程。
241
242```bash
243aa force-stop <bundleName>
244```
245
246  **返回值**:
247
248  当成功强制停止该进程时,返回"force stop process successfully.";当强制停止失败时,返回"error: failed to force stop process."。
249
250  **示例**:
251
252  ```bash
253  # 通过bundleName强制停止一个进程
254  aa force-stop com.example.myapplication
255  ```
256
257## 启动测试框架命令(test)
258
259根据所携带的参数启动测试框架。
260
261```bash
262aa test -b <bundleName> [-m <module-name>] [-p <package-name>] [-s class <test-class>] [-s level <test-level>] [-s size <test-size>] [-s testType <test-testType>] [-s timeout <test-timeout>] [-s <any-key> <any-value>] [-w <wait-time>] -s unittest <testRunner>
263```
264
265> **说明**:
266>
267> 关于class、level、size、testType等参数的详细说明请参见<!--RP2-->[aa test命令执行配置参数](../application-test/arkxtest-guidelines.md#cmd执行)<!--RP2End-->。
268
269  **启动测试框架命令参数列表**
270  | 参数 | 参数说明 |
271  | -------- | -------- |
272  | -h/--help | 帮助信息。 |
273  | -b | 必选参数,bundleName。 |
274  | -s unittest | 必选参数,testRunner。 |
275  | -p | 可选参数,testRunner的packageName。<br>**说明**:该可选参数仅可在FA模型下使用。 |
276  | -m | 可选参数,testRunner的moduleName。<br>**说明**:该可选参数仅可在Stage模型下使用。 |
277  | -s class | 可选参数,指定要执行的测试套或测试用例。 |
278  | -s level | 可选参数,指定要执行用例的用例级别。 |
279  | -s size | 可选参数,指定要执行用例的用例规模。 |
280  | -s testType | 可选参数,指定要执行用例的用例类型。 |
281  | -s timeout | 可选参数,测试用例执行的超时时间(单位ms),默认为5000。 |
282  | -s \<any-key> | 可选参数,任意键值对。 |
283  | -w | 可选参数,指定测试运行时间(单位ms)。 |
284  | -D | 可选参数,调试模式。 |
285
286  **返回值**:
287
288  当成功启动测试框架时,返回"user test started.";当启动失败时,返回"error: failed to start user test."和对应的错误信息。
289
290  **示例**:
291
292  ```bash
293  # 启动测试框架
294  aa test -b com.example.myapplication -s unittest ActsAbilityTest
295  # 启动测试框架并设置moduleName
296  aa test -b com.example.myapplication -m entry_test -s unittest ActsAbilityTest
297  # 启动测试框架并指定超时时间
298  aa test -b com.example.myapplication -m entry_test -s timeout 10000 -s unittest ActsAbilityTest
299  ```
300
301## 进入调试模式命令(attach)
302
303通过bundleName使指定应用进入调试模式。
304
305```bash
306aa attach -b <bundleName>
307```
308
309  **进入调试模式命令参数列表**
310  | 参数 | 参数说明              |
311  | -------- |-------------------|
312  | -h/--help | 帮助信息。             |
313  | -b | 必选参数,bundleName。  |
314
315  **返回值**:
316
317  当应用成功进入调试模式时,返回"attach app debug successfully.";当给定参数不合法时,返回"fail: unknown option."并打印帮助信息。
318
319  **示例**:
320
321  ```bash
322  # 通过bundleName使指定应用进入调试模式
323  aa attach -b com.example.myapplication
324  ```
325
326## 退出调试模式命令(detach)
327
328通过bundleName使指定应用退出调试模式。
329
330```bash
331aa detach -b <bundleName>
332```
333
334  **退出调试模式命令参数列表**
335  | 参数 | 参数说明              |
336  | -------- |-------------------|
337  | -h/--help | 帮助信息。             |
338  | -b | 必选参数,bundleName。  |
339
340  **返回值**:
341
342  当应用成功退出调试模式时,返回"detach app debug successfully.";当给定参数不合法时,返回"fail: unknown option."并打印帮助信息。
343
344  **示例**:
345
346  ```bash
347  # 通过bundleName使指定应用退出调试模式
348  aa detach -b com.example.myapplication
349  ```
350
351## 等待调试命令(appdebug)
352
353用于设置、取消设置应用等待调试状态,以及获取处于等待调试状态的应用包名和持久化信息。等待调试状态只对debug类型应用生效。appdebug的设置命令只对单个应用生效,当重复设置时,应用包名与持久化状态会替换成最新设置内容。
354
355```bash
356aa appdebug -b <bundleName> [-p]
357```
358
359  **等待调试命令参数列表**
360  | 参数 | 二级参数 | 参数说明 |
361  | -------- | -------- | -------- |
362  | -h/--help | - | 帮助信息。 |
363  | -b/--bundlename | bundleName | 为指定应用设置等待调试状态。设置时,不会进行包名合法化的校验。 |
364  | -p/--persist | - | 可选参数;持久化标志位,加入该参数,代表持续设置应用为等待调试状态,无论重启设备、重装应用都可以持续生效;不加入该参数,代表等待调试状态仅可以在重启设备前生效一次。需要和-b参数组合使用,例如:aa&nbsp;appdebug&nbsp;-b&nbsp;&lt;bundleName&gt;&nbsp;-p。 |
365  | -c/--cancel | - | 取消等待调试状态。 |
366  | -g/--get | - | 获取等待调试状态的应用包名和持久化信息。 |
367
368  **返回值**:
369
370  当执行成功时,返回"app debug successfully.";当执行失败时,返回"error: failed to app debug.";当失败原因为非开发者模式时,返回"error: not developer mode."。
371
372  **示例**:
373
374  ```bash
375  # 显示帮助信息
376  aa appdebug -h
377
378  # 为指定应用设置等待调试状态
379  aa appdebug -b com.example.myapplication [-p]
380
381  # 取消等待调试状态
382  aa appdebug -c
383
384  # 获取等待调试状态的应用包名和持久化信息
385  # 获取信息例: bundle name : com.example.publishsystem, persist : false
386  aa appdebug -g
387  ```
388
389## 应用调试/调优命令(process)
390
391对应用进行调试或调优,IDE用该命令集成调试和调优工具。
392
393```bash
394# 调试应用
395aa process -b <bundleName> -a <abilityName> [-m <moduleName>] [-D <debug-cmd>] [-S]
396
397# 调优应用
398aa process -b <bundleName> -a <abilityName> [-m <moduleName>] [-p <perf-cmd>] [-S]
399```
400
401  **应用调试/调优命令参数列表**
402  | 参数 | 参数说明 |
403  | -------- | -------- |
404  | -h/--help | 帮助信息。 |
405  | -b | 必选参数,bundleName。 |
406  | -a | 必选参数,abilityName。 |
407  | -m | 可选参数,moduleName。 |
408  | -p | 可选参数,调优命令,与-D必须二选一。命令由调用方自定义。 |
409  | -D | 可选参数,调试命令,与-p必须二选一。命令由调用方自定义。 |
410  | -S | 可选参数,进入应用沙箱。 |
411
412  **返回值**:
413
414  当执行成功时,返回"start native process successfully.";当执行失败时,返回"error: failed to start native process.";当给定参数不合法时,返回"error: option requires a value."并打印帮助信息。
415
416  **示例**:
417
418  ```bash
419  # 调试应用
420  aa process -b com.example.myapplication -a EntryAbility -D debug_cmd [-S]
421
422  # 调优应用
423  aa process -b com.example.myapplication -a EntryAbility -p perf-cmd [-S]
424  ```
425