@deveco-test/deveco-cli 1.3.5-Test.1 → 1.3.5-Test.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1751 -1684
  3. package/THIRD-PARTY-LICENSES +45 -0
  4. package/dist/cli.js +129 -125
  5. package/dist/internal/telemetry-upload-background.js +3 -3
  6. package/package.json +58 -57
  7. package/{SKILL.md → skills/deveco-cli/SKILL.md} +256 -236
  8. package/src/resources/aclPermission/aclPermissionsInfo.json +310 -310
  9. package/src/resources/arkts-check.cjs +3642 -3642
  10. package/templates/application/AppScope/app.json5 +10 -10
  11. package/templates/application/AppScope/resources/base/element/string.json +8 -8
  12. package/templates/application/AppScope/resources/base/media/layered_image.json +6 -6
  13. package/templates/application/build-profile.json5 +41 -41
  14. package/templates/application/code-linter.json5 +31 -31
  15. package/templates/application/entry/build-profile.json5 +32 -32
  16. package/templates/application/entry/gitignore.txt +5 -5
  17. package/templates/application/entry/hvigorfile.ts +7 -7
  18. package/templates/application/entry/obfuscation-rules.txt +19 -19
  19. package/templates/application/entry/oh-package.json5 +10 -10
  20. package/templates/application/entry/src/main/ets/entryability/EntryAbility.ets +62 -62
  21. package/templates/application/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +30 -30
  22. package/templates/application/entry/src/main/ets/pages/Index.ets +37 -37
  23. package/templates/application/entry/src/main/module.json5 +49 -49
  24. package/templates/application/entry/src/main/resources/base/element/color.json +7 -7
  25. package/templates/application/entry/src/main/resources/base/element/float.json +8 -8
  26. package/templates/application/entry/src/main/resources/base/element/string.json +15 -15
  27. package/templates/application/entry/src/main/resources/base/media/layered_image.json +6 -6
  28. package/templates/application/entry/src/main/resources/base/profile/backup_config.json +2 -2
  29. package/templates/application/entry/src/main/resources/base/profile/main_pages.json +5 -5
  30. package/templates/application/entry/src/main/resources/dark/element/color.json +7 -7
  31. package/templates/application/gitignore.txt +12 -12
  32. package/templates/application/hvigor/hvigor-config.json5 +23 -23
  33. package/templates/application/hvigorfile.ts +7 -7
  34. package/templates/application/oh-package.json5 +10 -10
package/README.md CHANGED
@@ -1,1684 +1,1751 @@
1
- <div align="center">
2
- <h1>DevEco CLI</h1>
3
- <p>一个面向 HarmonyOS 应用开发的统一命令行入口。</p>
4
- <p>
5
- <a href="https://www.npmjs.com/package/@deveco/deveco-cli"><img src="https://img.shields.io/npm/v/@deveco/deveco-cli.svg" alt="NPM Version" /></a>
6
- <a href="https://www.npmjs.com/package/@deveco/deveco-cli"><img src="https://img.shields.io/npm/dm/@deveco/deveco-cli.svg" alt="NPM Downloads" /></a>
7
- <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-%3E%3D22-green.svg" alt="Node.js" /></a>
8
- <img src="https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-blue.svg" alt="Platform" />
9
- <a href="https://developer.huawei.com/consumer/cn/download/"><img src="https://img.shields.io/badge/DevEco%20Studio-%3E%3D6.0.0-orange.svg" alt="DevEco Studio" /></a>
10
- <img src="https://img.shields.io/badge/Command%20Line%20Tools-%3E%3D26.0.0-orange.svg" alt="Command Line Tools" />
11
- <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License" /></a>
12
- </p>
13
- </div>
14
-
15
- `DevEco CLI` 将 `DevEco Studio` 工具链统一封装为一个 `CLI`,内置 `ohpm`、`hvigor`、`hdc`、`emulator`、`hilog`,同时集成 HarmonyOS 技能安装、项目脚手架、本地 HarmonyOS 文档检索和 `MCP` 服务。
16
-
17
- > 关于数据采集与隐私(遥测打点内容、存储加密、上报及关闭方式),请参阅 [PRIVACY.md](./PRIVACY.md)。
18
-
19
-
20
- ## 快速开始
21
-
22
- ### 前置要求
23
-
24
- - 操作系统为 `macOS` 、 `Windows` 或 `Linux`(需配置对应环境变量)
25
- - 安装`Node.js`,推荐使用22及以上版本
26
- - [DevEco Studio](https://developer.huawei.com/consumer/cn/download/) >= 6.0.0 或 [Command Line Tools](https://developer.huawei.com/consumer/cn/download/) >= 26.0.0
27
- - **macOS**:必须安装在 `~/Applications` 或 `/Applications` 目录下。
28
-
29
- ### 安装
30
-
31
- ```bash
32
- npm install -g @deveco/deveco-cli@latest
33
- ```
34
-
35
- 安装后可以通过以下命令更新到最新版本:
36
-
37
- ```bash
38
- devecocli update
39
- ```
40
-
41
- ### 最短工作流
42
-
43
- ```bash
44
- devecocli create --app-name MyApp
45
- cd MyApp
46
- devecocli run
47
- devecocli log --level E
48
- ```
49
-
50
- ### 文档检索
51
-
52
- ```bash
53
- devecocli docs search List
54
- devecocli docs read harmonyos-guides/application-models/arkts-page-start-overview
55
- ```
56
-
57
- 更多命令和参数可通过 `devecocli --help` 或各子命令的 `--help` 查看。
58
-
59
- ## 环境变量
60
-
61
- `devecocli` 当需要使用非默认安装路径、多版本并存时固定选型,Command Line Tools或在Linux下运行时,可通过以下环境变量显式指定工具链根:
62
-
63
- | 名称 | 说明 |
64
- | ------------------------ | ------------------------------------------------------ |
65
- | `DEVECO_CLI_STUDIO_PATH` | 显式指定 DevEco Studio 安装根,优先级最高 |
66
- | `DEVECO_CLI_CLT_PATH` | 显式指定 Command Line Tools 安装根 |
67
-
68
- 完整优先级链:
69
-
70
- ```text
71
- DEVECO_CLI_STUDIO_PATH > DEVECO_CLI_CLT_PATH > Auto_Detect
72
- ```
73
-
74
- ### 平台与版本约束
75
-
76
- | 平台 | DevEco Studio Auto_Detect | Command Line Tools | 最低版本 |
77
- | ------- | --------------------------------------------- | ------------------ | ----------------------------- |
78
- | Windows | 支持 | 可选 | Studio `6.0.0` / CLT `26.0.0` |
79
- | macOS | 支持 | 可选 | 同上 |
80
- | Linux | 不支持 | 必选 | CLT `26.0.0` |
81
-
82
- ### 使用示例
83
-
84
- ```bash
85
- # 设置 DevEco Studio
86
- export DEVECO_CLI_STUDIO_PATH="/Applications/DevEco-Studio.app" (可带或不带尾部 Contents)
87
- devecocli device list
88
-
89
- # 设置 CLT
90
- export DEVECO_CLI_CLT_PATH=/opt/command-line-tools
91
- devecocli device list
92
- ```
93
-
94
- ## AI Agent 集成
95
-
96
- `DevEco CLI` 支持通过命令行将自身技能添加到 `Agent` 中。下面以 `opencode` 为例展示最短流程:
97
-
98
- ```bash
99
- # 1. 给 opencode 安装 deveco-cli 技能
100
- devecocli init --agent opencode
101
-
102
- # 2. 给 opencode 在当前 HarmonyOS 项目配置 MCP
103
- devecocli init --mcp --agent opencode --project ./MyApp
104
-
105
- # 3. 进入项目并启动 opencode
106
- cd MyApp
107
- opencode
108
- ```
109
-
110
- 也支持 `atomcode`等 Agent,使用方式相同:
111
-
112
- ```bash
113
- # 给 atomcode 安装技能
114
- devecocli init --agent atomcode
115
- ```
116
-
117
- 如果 `Agent` 不在 `--agent` 参数取值范围内,可使用 `--path` 参数进行添加,参考如下命令:
118
-
119
- ```bash
120
- devecocli init --path D:\work\ARKTS\NewData
121
- ```
122
-
123
- 进入 `Agent` 后可以直接描述任务,例如:
124
-
125
- - `Build this project in release mode and run it on my emulator`
126
- - `Tail the last error logs from this app`
127
- - `Check for syntax errors in src/main/ets/pages/Index.ets`
128
-
129
- **说明:**
130
- - 在`Windows`上搭配`devecocli`使用`opencode`时,推荐将[powershell 7](https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows?view=powershell-7.6) 作为默认执行终端。
131
- - 在`Windows`上用`opencode`执行devecocli build/emulator start等指令时,若命令结束后终端无法正常退出,建议将默认终端切换为[powershell 7](https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows?view=powershell-7.6)
132
-
133
- ## 常用命令
134
-
135
- | 命令 | 用途 |
136
- | ------------------------- | ----------------------------------------- |
137
- | `devecocli create` | 创建新的 HarmonyOS 项目 |
138
- | `devecocli build` | 构建项目并产出 `.hap` / `.hsp` / `.har` / `.app` |
139
- | `devecocli check lint` | 检查代码规范并输出实践建议与报告 |
140
- | `devecocli check arkts` | 对 `.ets` 源文件执行 ArkTS 静态检查 |
141
- | `devecocli run` | 安装并运行应用 |
142
- | `devecocli device list` | 查看当前连接设备 |
143
- | `devecocli emulator list` | 查看本地模拟器实例 |
144
- | `devecocli ui layout` | 导出设备屏幕上的 UI 节点树(布局、坐标、节点 ID) |
145
- | `devecocli ui window list` | 查看设备窗口列表(为 `ui layout` / `ui click` 等提供窗口 ID) |
146
- | `devecocli ui screenshot` | 对真机或模拟器执行 UI 截图 |
147
- | `devecocli ui click` | 点击指定坐标或节点 ID |
148
- | `devecocli ui swipe` | 自定义滑动(指定起点、终点和速度) |
149
- | `devecocli ui text` | 输入文本到焦点或指定位置 |
150
- | `devecocli log` | 查看 `hilog` 或崩溃日志 |
151
- | `devecocli docs search` | 搜索本地 HarmonyOS 文档 |
152
- | `devecocli update docs` | 更新 HarmonyOS 文档到最新兼容版本 |
153
- | `devecocli init` | 安装内置技能或配置 `MCP` |
154
- | `devecocli skills` | 管理 HarmonyOS 技能市场中的技能 |
155
- | `devecocli signature generate` | 自动生成调试签名材料并配置到项目 |
156
- | `devecocli check compat` | 扫描源代码在两个 `SDK` 版本之间的 `API` 变更 |
157
-
158
- ## 命令集
159
-
160
- ### `help`
161
-
162
- 查看版本、帮助信息以及所有子命令
163
-
164
- **命令格式:**
165
-
166
- ```bash
167
- devecocli help
168
- ```
169
-
170
- ```text
171
- # 返回结果
172
- Usage: devecocli [options] [command]
173
-
174
- HarmonyOS application development command line tool
175
-
176
- Options:
177
- -V, -v, --version output the version number
178
- -h, --help display help for command
179
-
180
- Commands:
181
- build [options] Build the HarmonyOS project
182
- run [options] Build and run the project on a connected device
183
- update Update deveco-cli to the latest version
184
- device Manage connected devices
185
- emulator Manage emulator instances
186
- auth Authentication commands (login, logout, status, team)
187
- ui Inspect and interact with UI on a connected device
188
- skills Manage HarmonyOS skills
189
- log [options] Obtain device application logs
190
- create [options] Scaffold a new HarmonyOS application project
191
- init [options] Install the deveco-cli skill or configure the deveco-mcp server into AI agents
192
- serve Host bundled auxiliary protocol servers
193
- docs [options] Search and read HarmonyOS documentation from local docs directory
194
- check Run DevEco project checks
195
- signature Generate application signature
196
- help [command] display help for command
197
- ```
198
-
199
- ### `init`
200
-
201
- 将`deveco-cli` `Skill` 或者 `MCP` 服务配置到智能体中
202
-
203
- **命令格式:**
204
-
205
- ```bash
206
- devecocli init --agent <agents> --project <path> --path <path> --skill --mcp --force
207
- ```
208
-
209
- **参数:**
210
-
211
- | 参数名 | 说明 |
212
- | ----------- | ----------------------------------------------------------------------------------------- |
213
- | --agent | 可选,智能体名称,多个智能体名称以英文逗号分隔。缺省时配置到所有已检测到的智能体中 |
214
- | --project | 可选,指定工程路径,将`deveco-cli` `Skill` 或 `MCP` 服务安装到该工程项目中 |
215
- | --path | 可选,指定 `deveco-cli` `Skill` 的配置路径。不可与 `--project` 、`--agent` 、 `--mcp` 同时使用 |
216
- | --skill | 可选,安装 `deveco-cli` `Skill`。不可与 `--mcp` 同时使用。`--mcp` 与 `--skill` 都缺省时,执行 `--skill` |
217
- | --mcp | 可选,配置 `MCP` 服务,与 `--project` 一起使用表示配置工程级 `MCP` 服务,独立使用表示配置用户级 `MCP` 服务。不可与 `--skill` 同时使用 |
218
- | -f, --force | 可选,当目标位置已存在 `deveco-cli` `Skill` 或 `MCP` 服务时,覆盖重装 |
219
-
220
- **示例:**
221
-
222
- ```bash
223
- # 配置Skill
224
- devecocli init -f # 安装或更新deveco-cli Skill
225
- devecocli init --skill
226
- devecocli init --agent agentname # agentname需替换为实际的智能体名称
227
- devecocli init --path D:\work\ARKTS\NewData -f
228
-
229
- # 配置MCP
230
- devecocli init --mcp
231
- devecocli init --mcp --agent agentname # agentname需替换为实际的智能体名称
232
- devecocli init --mcp --project D:\work\ARKTS\NewData -f
233
- ```
234
-
235
- ### `docs search`
236
-
237
- 将关键词搜索版本说明、指南、API参考、最佳实践、`FAQ` 、变更预告等中的内容
238
-
239
- **命令格式:**
240
-
241
- ```bash
242
- devecocli docs search <keywords...> --catalog <name> --format <fmt> --limit <n>
243
- ```
244
-
245
- **参数:**
246
-
247
- | 参数名 | 说明 |
248
- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
249
- | keywords... | 必选,搜索关键词,多个关键词用空格隔开 |
250
- | --catalog | 可选,文档类别,取值包含`harmonyos-releases`(版本说明)、 `harmonyos-guides`(指南)、`harmonyos-references`(API参考)、`best-practices`(最佳实践)、`harmonyos-faqs`(FAQ)、`harmonyos-roadmap`(变更预告)、`all`(所有分类,默认) |
251
- | --format | 可选,控制输出格式,取值包括 `default` 、`json` ,默认为`default` ,输出结果包括文档ID、标题、文档的概括内容 |
252
- | --limit | 可选,设置搜索结果返回条数,默认为10 |
253
-
254
- **示例:**
255
-
256
- ```bash
257
- devecocli docs search 沉浸光感
258
- devecocli docs search '@State' '@Prop' --catalog best-practices --limit 10
259
- devecocli docs search Row Column --format json
260
- ```
261
-
262
- ### `docs read`
263
-
264
- 按文档ID查询文档的完整内容
265
-
266
- **命令格式:**
267
-
268
- ```bash
269
- devecocli docs read <documentId>
270
- ```
271
-
272
- **参数:**
273
-
274
- | 参数名 | 说明 |
275
- | ---------- | ------- |
276
- | documentId | 必选,文档ID |
277
-
278
- **示例:**
279
-
280
- ```bash
281
- devecocli docs read 开发指南/UI_Design_Kit_UI设计套件/UI_Design_Kit简介/ui-design-introduction
282
- ```
283
-
284
- ### `docs catalog`
285
-
286
- 查询文档分类和分类名称
287
-
288
- **命令格式:**
289
-
290
- ```bash
291
- devecocli docs catalog --format <fmt>
292
- ```
293
-
294
- **参数:**
295
-
296
- | 参数名 | 说明 |
297
- | -------- | ----------------------------------------- |
298
- | --format | 可选,输出格式,`default` 或 `json` ,默认为 `default` |
299
-
300
- **示例:**
301
-
302
- ```bash
303
- devecocli docs catalog
304
- devecocli docs catalog --format json
305
- ```
306
-
307
- ### `create`
308
-
309
- 创建 HarmonyOS 应用工程,仅支持创建工程模板中的 `Empty Ability` 模板
310
-
311
- **命令格式:**
312
-
313
- ```bash
314
- devecocli create --app-name <name> --project-path <path> --bundle-name <bundle> --api-level <level>
315
- ```
316
-
317
- **参数:**
318
-
319
- | 参数名 | 说明 |
320
- | -------------- | ----------------------------------------------------------------- |
321
- | --app-name | 必选,应用名称 |
322
- | --project-path | 可选,工程路径,默认为:`./<appname>` |
323
- | --bundle-name | 可选,包名,默认为:`com.example.<appname>` ,`appname` 自动转为小写 |
324
- | --api-level | 可选,API级别,最小值为17,最大值从安装的 `Deveco Studio` 的 `HarmonyOS` `SDK` 中自动获取 |
325
-
326
- **示例:**
327
-
328
- ```bash
329
- devecocli create --project-path ./MyApp --app-name MyApp
330
- devecocli create --project-path ./MyApp --app-name MyApp --bundle-name com.acme.myapp --api-level 23
331
- devecocli create --app-name MyApp
332
- ```
333
-
334
- ### `auth login`
335
-
336
- 登录华为开发者账号,打开浏览器完成授权。
337
-
338
- **命令格式:**
339
-
340
- ```bash
341
- devecocli auth login
342
- ```
343
-
344
- **说明:**
345
-
346
- - 海外账户暂不支持
347
-
348
- ### `auth logout`
349
-
350
- 登出并清除本地存储的凭据
351
-
352
- **命令格式:**
353
-
354
- ```bash
355
- devecocli auth logout
356
- ```
357
-
358
- ### `auth status`
359
-
360
- 显示当前登录的用户
361
-
362
- **命令格式:**
363
-
364
- ```bash
365
- devecocli auth status
366
- ```
367
-
368
- ### `auth team list`
369
-
370
- 列出当前用户已加入的团队
371
-
372
- **命令格式:**
373
-
374
- ```bash
375
- devecocli auth team list
376
- ```
377
-
378
- **示例:**
379
-
380
- ```bash
381
- devecocli auth team list
382
- ```
383
-
384
- ### `build`
385
-
386
- 编译并打包 HarmonyOS 工程或工程中的模块
387
-
388
- **命令格式:**
389
-
390
- ```bash
391
- devecocli build --product <product> --modules <modules> --build-mode <mode>
392
- ```
393
-
394
- **参数:**
395
-
396
- | 参数名 | 说明 |
397
- | ------------ | ------------------------------------------------------------------------------------------------------- |
398
- | --product | 可选,产品的名称,默认为 `default` |
399
- | --modules | 可选,模块的名称。如需指定模块的 `target` 信息,使用 `module@target` 形式。当工程中只有一个模块时,可缺省;当工程中存在多个模块,且仅存在一个 `entry` 类型的模块时,可缺省 |
400
- | --build-mode | 可选,构建模式,默认为 `debug` |
401
-
402
- **示例:**
403
-
404
- ```bash
405
- devecocli build --build-mode release
406
- devecocli build --modules entry library
407
- devecocli build --modules library@phone
408
- devecocli build --product oversea --modules entry --build-mode release
409
- ```
410
-
411
- **说明:**
412
-
413
- - 选定模块的依赖会被自动解析和构建
414
- - 执行`devecocli build --product <name>`命令后,产物为 `.app`
415
- - 执行`devecocli build --product <name> --modules <m1>`命令后,产物为 `.hap` / `.hsp` / `.har`
416
-
417
- ### `build clean`
418
-
419
- 清理 HarmonyOS 项目的构建产物
420
-
421
- **命令格式:**
422
-
423
- ```bash
424
- devecocli build clean
425
- ```
426
-
427
- ### `check compat`
428
-
429
- 基于 `DevEco Studio` 自带的 `apkanalyzer-apiscan` 插件,扫描源代码在两个 `SDK` 版本之间的 `API` 变更情况。
430
-
431
- **子命令:**
432
-
433
- | 子命令 | 说明 |
434
- | --- | --- |
435
- | `devecocli check compat` | 默认执行工程级扫描 |
436
- | `devecocli check compat --modules <m1> [m2...]` | 按模块扫描 |
437
- | `devecocli check compat <file1> [file2...]` | 按文件扫描(仅支持 `.ets`/`.c`/`.cpp`) |
438
- | `devecocli check compat versions` | 列出可用的目标 `SDK` 版本 |
439
-
440
- **命令格式:**
441
-
442
- ```bash
443
- devecocli check compat [files...] --source-version <ver> --target-version <ver> [--modules <m...>] [--format <default|csv|json>] [--output-path <path>] [--limit <n>]
444
- ```
445
-
446
- **参数:**
447
-
448
- | 参数名 | 说明 |
449
- | --- | --- |
450
- | `--source-version` | 必填,当前工程 `SDK` 版本 |
451
- | `--target-version` | 必填,目标 `SDK` 版本 |
452
- | `--modules` | 可选,指定扫描的模块(多个以空格分隔)。与文件参数互斥 |
453
- | `--format` | 可选,输出格式。`default`/`csv`/`json`。默认 `default`(控制台输出文本,文件输出 `csv`) |
454
- | `--output-path` | 可选,报告输出路径。目录或文件(扩展名必须与 `--format` 匹配) |
455
- | `--limit` | 可选,控制台显示的最大记录数,默认 `100` |
456
-
457
- **版本号说明:**
458
-
459
- - 可用版本可通过 `devecocli check compat versions` 查看
460
- - `zsh` 环境下版本号需用引号包裹(包含括号),例如 `"<source_version>"`、`"<target_version>"`
461
-
462
- **`compat versions` 参数:**
463
-
464
- | 参数名 | 说明 |
465
- | --- | --- |
466
- | `--format` | 可选,输出格式。`default` 或 `json`。默认 `default`(文本输出,每行一个版本号) |
467
-
468
- **格式与输出组合:**
469
-
470
- | 场景 | 允许的 `--format` | 行为 |
471
- | --- | --- | --- |
472
- | 控制台输出(无 `--output-path`) | `default` / `json` | `default` 输出文本表格,`json` 输出 `JSON` |
473
- | 文件输出(`--output-path <file>`,扩展名必须匹配 `--format`) | `default` / `csv` / `json` | `default`/`csv` 写 `.csv` 文件;`json` 写 `.json` 文件 |
474
- | 目录输出(`--output-path <dir>`,无扩展名) | `default` / `csv` / `json` | `default`/`csv` 生成 `apiChange-res{N}.csv`;`json` 生成 `apiChange-res{N}.json` |
475
-
476
- **示例:**
477
-
478
- ```bash
479
- # 工程级扫描,输出到控制台
480
- devecocli check compat --source-version "<source_version>" --target-version "<target_version>"
481
-
482
- # 输出 JSON 到控制台
483
- devecocli check compat --format json --source-version "<source_version>" --target-version "<target_version>"
484
-
485
- # 输出报告到目录(默认 csv)
486
- devecocli check compat --output-path ./report --source-version "<source_version>" --target-version "<target_version>"
487
-
488
- # 输出 JSON 报告到目录(生成 apiChange-res{N}.json)
489
- devecocli check compat --output-path ./report --format json --source-version "<source_version>" --target-version "<target_version>"
490
-
491
- # 输出报告到指定文件
492
- devecocli check compat --output-path ./report.json --format json --source-version "<source_version>" --target-version "<target_version>"
493
-
494
- # 文件级扫描
495
- devecocli check compat ./entry/src/main/ets/pages/Index.ets --source-version "<source_version>" --target-version "<target_version>"
496
-
497
- # 模块级扫描
498
- devecocli check compat --modules entry har1 --source-version "<source_version>" --target-version "<target_version>"
499
- ```
500
-
501
- ### `check lint`
502
-
503
- 检查代码规范并输出实践建议与报告。
504
-
505
- **命令格式:**
506
-
507
- ```bash
508
- devecocli check lint [path]
509
- ```
510
-
511
- **参数:**
512
-
513
- | 参数名 | 说明 |
514
- | ---------------------------- | --------------------------------------------------------------------- |
515
- | `[path]` | 可选,待检查的文件或目录;默认使用 `build-profile.json5` 所在的项目根目录,否则使用当前目录 |
516
- | `--config-path <path>` | Code Linter 配置文件路径,仅支持 `.json` 或 `.json5`;默认使用待检查项目根目录下的 `code-linter.json5`,显式指定时必须与待检查路径属于同一项目 |
517
- | `--fix` | 自动修复可修复的问题 |
518
- | `--incremental` | 仅检查 Git 未提交文件 |
519
- | `--product <name>` | `build-profile.json5` 中定义的 product,默认为 `default` |
520
- | `--format <default\|json>` | 完整报告格式;`default` 输出 Markdown,`json` 输出 JSON;要求 DevEco Studio ≥ 6.1.0 |
521
- | `--output-path <path>` | 完整报告文件或目录,目录形式会自动生成带时间戳的报告文件;要求 DevEco Studio ≥ 6.1.0 |
522
- | `--limit <number>` | 未指定 `--output-path` 时,限制终端显示的问题数量 |
523
-
524
- `emulator` 版本要求: DevEco Studio ≥ 6.1.0
525
-
526
- ### `check arkts`
527
-
528
- 对 `.ets` 源文件执行 ArkTS 静态检查,基于 DevEco Studio 的 `etsStandaloneChecker`。
529
-
530
- **命令格式:**
531
-
532
- ```bash
533
- devecocli check arkts [files...] [--fix] [--project <path>]
534
- ```
535
-
536
- **参数:**
537
-
538
- | 参数名 | 说明 |
539
- | --- | --- |
540
- | `[files...]` | 可选,待检查的 `.ets` 文件列表;默认检查项目内所有 `.ets` 文件 |
541
- | `--fix` | 自动修复高置信度错误(如缺失的 `export` 关键字) |
542
- | `--project <path>` | 项目根目录;默认从当前目录自动检测 `build-profile.json5` |
543
-
544
- **示例:**
545
-
546
- ```bash
547
- # 检查整个项目
548
- devecocli check arkts
549
-
550
- # 检查指定文件并自动修复
551
- devecocli check arkts --fix entry/src/main/ets/pages/Index.ets
552
-
553
- # 指定项目路径
554
- devecocli check arkts --project /path/to/project
555
- ```
556
-
557
- ### `emulator list`
558
-
559
- 查看模拟器实例
560
-
561
- **命令格式:**
562
-
563
- ```bash
564
- devecocli emulator list [--format <table|json>]
565
- devecocli emulator list --details
566
- ```
567
-
568
- **参数:**
569
-
570
- | 参数名 | 说明 |
571
- | --- | --- |
572
- | `--format` | 可选,控制终端输出格式,取值为 `table` 或 `json`,默认为 `table`;`json` 返回固定的五字段精简结构 |
573
- | `--details` | 可选,直接输出底层 `Emulator -list -details` 的完整 JSON,不做任何字段裁剪、重命名或补充;与 `--format` 互斥 |
574
-
575
- **示例:**
576
-
577
- ```bash
578
- devecocli emulator list
579
- devecocli emulator list --format json
580
- devecocli emulator list --details
581
- ```
582
-
583
- ### `emulator start`
584
-
585
- 启动模拟器。首次使用时,需要签署 HarmonyOS 软件许可与服务协议,具体请参考 `emulator license`
586
-
587
- **命令格式:**
588
-
589
- ```bash
590
- devecocli emulator start [names...]
591
- ```
592
-
593
- **参数:**
594
-
595
- | 参数名 | 说明 |
596
- | ----------- | ----------------------------------------- |
597
- | \[names...] | 必选,模拟器实例名称,多个名称用空格隔开。若名称中带有空格,则名称需要添加英文引号 |
598
-
599
- **示例:**
600
-
601
- ```bash
602
- devecocli emulator start Phone
603
- devecocli emulator start Phone1 Phone2
604
- ```
605
-
606
- **说明:**
607
-
608
- - `emulator start` 命令仅支持启动 `release` 版本的模拟器
609
-
610
- ### `emulator stop`
611
-
612
- 关闭模拟器
613
-
614
- **命令格式:**
615
-
616
- ```bash
617
- devecocli emulator stop [names...]
618
- ```
619
-
620
- **参数:**
621
-
622
- | 参数名 | 说明 |
623
- | ----------- | ----------------------------------------- |
624
- | \[names...] | 必选,模拟器实例名称,多个名称用空格隔开。若名称中带有空格,则名称需要添加英文引号 |
625
-
626
- **示例:**
627
-
628
- ```bash
629
- devecocli emulator stop Phone
630
- devecocli emulator stop 127.0.0.1:5555
631
- ```
632
-
633
- ### `emulator` 场景操作
634
-
635
- 控制运行中的模拟器实例,直接映射 DevEco Studio 内置 Emulator 公开命令行参数。新增场景控制命令要求 Emulator 7.0 或更高版本;低版本会直接提示升级。截图不属于模拟器场景操作,统一通过 `devecocli ui screenshot` 执行。
636
-
637
- **示例:**
638
-
639
- ```bash
640
- devecocli emulator shake --target Phone
641
- devecocli emulator power --target Phone
642
- devecocli emulator rotate left --target Phone
643
- devecocli emulator volume up --target Phone
644
- devecocli emulator fold half-open --target Phone
645
- devecocli emulator battery --target Phone --level 90
646
- devecocli emulator battery --target Phone --status charging
647
- devecocli emulator battery --target Phone --level 80 --status charging
648
- devecocli emulator geolocation --target Phone --longitude 116.40024 --latitude 39.908
649
- devecocli emulator scene outdoorRunning --target Phone
650
- devecocli emulator sensor --target Phone --heartrate 80
651
- ```
652
-
653
- **说明:**
654
-
655
- - `--target` 支持模拟器名称或 `127.0.0.1:<port>` 序列号。
656
- - `battery --level` 与 `battery --status` 可同时传入(一次调用同时设置电量与充电状态)。
657
- - `battery --level` 会自动查询模拟器当前充电状态:充电时取值范围为整数 `[0, 100]`,未充电时为 `[1, 100]`。
658
- - `battery --status` 取值为 `charging` 或 `discharging`。
659
- - `--level 0` 与 `--status discharging` 组合非法(电量 0 仅在充电时允许),会被拒绝。
660
- - `geolocation` 支持 `--longitude`、`--latitude`、`--altitude`、`--direction`。
661
- - `scene` 取值为 `outdoorRunning`、`outdoorCycling`、`drivingNavigation`。
662
- - `sensor` 支持 `--light-intensity`、`--humidity`、`--temperature`、`--steps`、`--heartrate`,可同时传入多个。
663
- - `geolocation`/`battery`/`sensor` 多参数为逐项串行下发、非原子:第 N 项失败时前 N−1 项已生效且不回滚,建议失败后整体重跑。
664
- - `fold <state>` 会根据目标模拟器的设备类型校验状态,设备与参数必须匹配:
665
-
666
- | 设备类型 | 支持的 `state` |
667
- | --- | --- |
668
- | `foldable` | `open`、`half-open`、`close` |
669
- | `2in1_foldable` | `open`、`vertical-open`、`half-open`、`close` |
670
- | `triplefold` | `single`、`double`、`triple`、`left-folded-right-half-folded`、`left-half-folded-right-expanded`、`left-expanded-right-folded`、`left-half-folded-right-folded`、`left-expanded-right-half-folded`、`left-half-folded-right-half-folded` |
671
-
672
- 校验以目标模拟器实际返回的 `deviceType` 为准。非上述三种设备类型以及不属于目标设备类型的状态会在命令下发前被拒绝。校验通过后,底层映射为 `Emulator -instance <name> -foldedState <state>`。
673
- - 设置 `DEVECO_CLI_DEBUG=1` 可查看底层命令映射,例如 `Emulator -instance <name> -shake`。
674
-
675
- ### `emulator create`
676
-
677
- 创建模拟器
678
-
679
- **命令格式:**
680
-
681
- ```bash
682
- devecocli emulator create <name> \
683
- --device-type <type> \
684
- --os-version <version> \
685
- [--instance-path <path>] \
686
- [--image-root <path>] \
687
- [--screen-profile <model>] \
688
- [--screen <config...>] \
689
- [--storage <size>] \
690
- [--memory <size>] \
691
- [--hot-boot <true|false>] \
692
- [--force]
693
- ```
694
-
695
- **参数:**
696
-
697
- | 参数名 | 说明 |
698
- | --- | --- |
699
- | `name` | 必选,模拟器名称 |
700
- | `--device-type` | 必选,指定模拟器产品类型,支持的产品类型以官方设备支持类型为准,不区分大小写 |
701
- | `--os-version` | 必选,模拟器镜像版本 |
702
- | `--instance-path` / `--path` | 可选,模拟器实例路径 |
703
- | `--image-root` | 可选,模拟器镜像路径 |
704
- | `--screen-profile` | 可选,模拟器设备型号,例如 `Mate 70 Pro` |
705
- | `--screen` | 可选,屏幕配置,格式为 `宽度(px) 高度(px) DPI 屏幕对角线长度(inch)`;宽度和高度范围为 720~3500 px,DPI 范围为 240~640,屏幕对角线长度范围为 3.5~9 inch;折叠屏模拟器传入两组配置 |
706
- | `--storage` | 可选,存储空间,范围 `2–1023`,单位 G |
707
- | `--memory` | 可选,运行内存,范围 `2–32`,单位 G |
708
- | `--hot-boot` | 可选,取值为 `true` 或 `false`,从 26.0.0 Beta1 开始支持;API 26 及以上未指定时默认为 `true` |
709
- | `--force` | 可选,覆盖已有同名的模拟器 |
710
-
711
- `--screen-profile` 和 `--screen` 可同时指定,此时使用 `--screen`。
712
-
713
- **示例:**
714
-
715
- ```bash
716
- devecocli emulator create MyPhone --device-type phone --os-version "HarmonyOS 6.0.1(21)"
717
-
718
- devecocli emulator create MyPhone \
719
- --device-type phone \
720
- --os-version "HarmonyOS 6.0.1(21)" \
721
- --screen-profile "Mate 70 Pro" \
722
- --storage 8 \
723
- --memory 8
724
-
725
- devecocli emulator create Foldable \
726
- --device-type foldable \
727
- --os-version "HarmonyOS 6.0.1(21)" \
728
- --screen "2200 2480 480 7.8" "1080 2480 480 6.4"
729
- ```
730
-
731
- ### `emulator delete`
732
-
733
- 删除模拟器
734
-
735
- **命令格式:**
736
-
737
- ```bash
738
- devecocli emulator delete <name> [--instance-path <path>]
739
- ```
740
-
741
- **参数:**
742
-
743
- | 参数名 | 说明 |
744
- | --- | --- |
745
- | `name` | 必选,模拟器实例名称或序列号 |
746
- | `--instance-path` / `--path` | 可选,模拟器实例路径;删除通过自定义路径创建的模拟器时,需传入创建时使用的同一路径 |
747
-
748
- **示例:**
749
-
750
- ```bash
751
- devecocli emulator delete MyPhone
752
-
753
- devecocli emulator delete MyPhone --instance-path /custom/instance/path
754
- ```
755
-
756
- ### `emulator image list`
757
-
758
- 查询模拟器镜像列表
759
-
760
- **命令格式:**
761
-
762
- ```bash
763
- devecocli emulator image list --device-type <type> --all --format <format>
764
- ```
765
-
766
- **参数:**
767
-
768
- | 参数名 | 说明 |
769
- | ------------- | -------------------------------------------------------------------------------------------------------------------------- |
770
- | --device-type | 可选,模拟器设备类型,支持 `phone` , `foldable` , `widefold` , `triplefold` , `tablet` , `2in1` , `2in1 foldable` , `tv` , `wearable` |
771
- | --all | 可选,查询已下载和未下载的所有镜像 |
772
- | --format | 可选,控制输出格式,取值为 `table` 或 `json` ,默认为 `table` |
773
-
774
- **示例:**
775
-
776
- ```bash
777
- devecocli emulator image list
778
- devecocli emulator image list --all
779
- devecocli emulator image list --device-type phone
780
- devecocli emulator image list --format json
781
- ```
782
-
783
- ### `emulator image download`
784
-
785
- 下载模拟器镜像。首次使用时,需要签署 HarmonyOS `SDK` 许可协议,具体请参考 `emulator license`
786
-
787
- **命令格式:**
788
-
789
- ```bash
790
- devecocli emulator image download --device-type <type> --os-version <version> --force
791
- ```
792
-
793
- **参数:**
794
-
795
- | 参数名 | 说明 |
796
- | ------------- | ------------------------------------------------------------------------------------------------------------------------------- |
797
- | --device-type | 必选,模拟器设备类型,支持 `phone` , `foldable` , `widefold` , `triplefold` , `tablet` , `2in1` , `2in1 foldable` , `tv` , `wearable` ,全小写 |
798
- | --os-version | 必选,模拟器镜像版本 |
799
- | --force | 可选,覆盖已有的模拟器镜像 |
800
-
801
- **示例:**
802
-
803
- ```bash
804
- devecocli emulator image download --device-type phone --os-version "HarmonyOS 6.0.1(21)" --force
805
- ```
806
-
807
- **说明:**
808
-
809
- - `emulator image download` 命令仅支持下载 `release` 版本的模拟器镜像
810
-
811
- ### `emulator image remove`
812
-
813
- 删除模拟器镜像
814
-
815
- **命令格式:**
816
-
817
- ```bash
818
- devecocli emulator image remove --device-type <type> --os-version <version>
819
- ```
820
-
821
- **参数:**
822
-
823
- | 参数名 | 说明 |
824
- | ------------- | ------------------------------ |
825
- | --device-type | 必选,模拟器设备类型,与下载镜像的device-type一致 |
826
- | --os-version | 必选,模拟器镜像版本,与下载镜像的os-version一致 |
827
-
828
- **示例:**
829
-
830
- ```bash
831
- devecocli emulator image remove --device-type phone --os-version "HarmonyOS 6.0.1(21)"
832
- ```
833
-
834
- ### `emulator license view`
835
-
836
- 查看协议文本(只读)
837
-
838
- **命令格式:**
839
-
840
- ```bash
841
- devecocli emulator license view
842
- ```
843
-
844
- ### `emulator license`
845
-
846
- 交互式查看并接受协议。打印完整协议文本后提示 y/N 确认。使用模拟器需要同意 HarmonyOS 软件许可与服务协议,下载镜像需要同意 HarmonyOS `SDK` 许可协议。若已同意则直接提示已接受。非交互终端下会报错,请改用 `emulator license accept`
847
-
848
- **命令格式:**
849
-
850
- ```bash
851
- devecocli emulator license
852
- ```
853
-
854
- ### `emulator license accept`
855
-
856
- 非交互式同意模拟器所有协议,直接写入同意记录,跳过协议展示和确认提示。适用于自动化脚本、CI 或非交互终端环境。若已同意则直接提示已接受
857
-
858
- **命令格式:**
859
-
860
- ```bash
861
- devecocli emulator license accept
862
- ```
863
-
864
- ### `device list`
865
-
866
- 查询所有已连接的设备,包括真机设备和运行中的模拟器
867
-
868
- **命令格式:**
869
-
870
- ```bash
871
- devecocli device list [--format <table|json>]
872
- ```
873
-
874
- **参数:**
875
-
876
- | 参数名 | 说明 |
877
- | --- | --- |
878
- | --format | 可选,输出格式。可选值:`table`、`json`,默认 `table` |
879
-
880
- ### `device view`
881
-
882
- 查询已连接的设备的详细信息,包括设备序列号、设备名称、设备类型、 `OS` 版本等
883
-
884
- **命令格式:**
885
-
886
- ```bash
887
- devecocli device view [--target <serialOrName>] [--format <table|json>]
888
- ```
889
-
890
- **参数:**
891
-
892
- | 参数名 | 说明 |
893
- | ----------- | ------------------------------------- |
894
- | -t,--target | 可选,目标设备名称或序列号。多设备缺省时,会列出所有已连接设备序列号和名称 |
895
- | --format | 可选,输出格式。可选值:`table`、`json`,默认 `table` |
896
-
897
- **示例:**
898
-
899
- ```bash
900
- devecocli device view
901
- devecocli device view --target 127.0.0.1:5555
902
- devecocli device view -t "My Device Name"
903
- devecocli device view -t 127.0.0.1:5555 --format json
904
- ```
905
-
906
- ### `device file`
907
-
908
- 在主机与设备(真机或模拟器)之间传输文件,底层映射为 `hdc -t <serial> file send/recv <src> <dst>`。
909
-
910
- **命令格式:**
911
-
912
- ```bash
913
- devecocli device file [--device <name|serial>] send <src> <dst>
914
- devecocli device file [--device <name|serial>] recv <src> <dst>
915
- ```
916
-
917
- **参数:**
918
-
919
- | 参数名 | 说明 |
920
- | --- | --- |
921
- | --device | 可选,目标设备名称或序列号。单设备可省略,多设备时必填 |
922
- | send <src> <dst> | 子命令,上传本地文件到设备 `<src>`(本地) → `<dst>`(设备端) |
923
- | recv <src> <dst> | 子命令,下载设备文件到主机 `<src>`(设备端) → `<dst>`(本地) |
924
-
925
- **示例:**
926
-
927
- ```bash
928
- devecocli device file send ./local.txt /data/local/tmp/remote.txt
929
- devecocli device file recv /data/local/tmp/remote.txt ./local.txt --device 127.0.0.1:5555
930
- ```
931
-
932
- ### `device sqlite3`
933
-
934
- 在设备上执行 `sqlite3`,底层映射为 `hdc -t <serial> shell sqlite3 <db-path> [args...]`,后续参数原样透传给设备的 `sqlite3`。
935
-
936
- **命令格式:**
937
-
938
- ```bash
939
- devecocli device sqlite3 [--device <name|serial>] <db-path> [args...]
940
- ```
941
-
942
- **参数:**
943
-
944
- | 参数名 | 说明 |
945
- | --- | --- |
946
- | --device | 可选,目标设备名称或序列号。单设备可省略,多设备时必填 |
947
- | db-path | 设备端 SQLite 数据库文件路径 |
948
- | args | 可选,透传给设备 `sqlite3` 的参数,如 `-json`、`-header`、`-readonly`、SQL 语句、点命令等 |
949
-
950
- **示例:**
951
-
952
- ```bash
953
- devecocli device sqlite3 /data/app/el2/100/database/com.example.app/foo.db "select * from user limit 5" -json
954
- ```
955
-
956
- ### `ui screenshot`
957
-
958
- 对真机或模拟器执行 UI 截图。
959
-
960
- **命令格式:**
961
-
962
- ```bash
963
- devecocli ui screenshot --device <name|serial> --display <displayId> --path <path>
964
- ```
965
-
966
- **参数:**
967
-
968
- | 参数 | 说明 | 默认值 |
969
- | ------------------------ | ------------------------ | ---------- |
970
- | --device \<name\|serial> | 真机或模拟器名称/序列号;多设备时必填 | 单设备自动选择 |
971
- | --display \<displayId> | 目标屏幕 ID,可选 | 默认屏幕 |
972
- | --path \<path> | 必填,文件夹路径或 PNG 文件路径;支持相对于当前目录的路径,目录必须存在且可写,目标文件不能已存在 | 无 |
973
-
974
- **示例:**
975
-
976
- ```bash
977
- mkdir -p screenshots
978
- devecocli ui screenshot --device Phone --path ./screenshots
979
- devecocli ui screenshot --device Phone --display 0 --path ./screenshots/phone.png
980
- ```
981
-
982
- **说明:**
983
-
984
- - `ui screenshot` 支持真机和模拟器。
985
- - 仅有一个可用设备时可省略 `--device`,多个设备同时连接时必须指定。
986
- - `--path` 可以使用相对于当前目录的路径。可以指定已存在的文件夹并自动生成 PNG 文件名,也可以指定完整的 PNG 文件路径;不会自动创建目录或覆盖已有文件。
987
- - 截图能力统一通过 `ui screenshot` 提供,不放在模拟器场景操作命令中。
988
- - 截图统一使用 `hdc shell snapshot_display` 和 `hdc file recv` 实现;设置 `DEVECO_CLI_DEBUG=1` 可查看实际执行命令。
989
-
990
- ### `ui click`
991
-
992
- 点击指定坐标或节点 ID 的中心位置。
993
-
994
- **命令格式:**
995
-
996
- ```bash
997
- devecocli ui click [x] [y] --device <name|serial> --id <id> --window <windowId>
998
- ```
999
-
1000
- **参数:**
1001
-
1002
- | 参数 | 说明 |
1003
- | --- | --- |
1004
- | `[x] [y]` | 可选,目标坐标。缺省时需配合 `--id` 使用 |
1005
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1006
- | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]` 同时使用 |
1007
- | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1008
-
1009
- **示例:**
1010
-
1011
- ```bash
1012
- devecocli ui click 100 200
1013
- devecocli ui click 100 200 --device Phone
1014
- devecocli ui click --id submit_button
1015
- devecocli ui click --id submit_button --window main_window
1016
- ```
1017
-
1018
- ### `ui doubleclick`
1019
-
1020
- 双击指定坐标或节点 ID 的中心位置。
1021
-
1022
- **命令格式:**
1023
-
1024
- ```bash
1025
- devecocli ui doubleclick [x] [y] --device <name|serial> --id <id> --window <windowId>
1026
- ```
1027
-
1028
- **参数:**
1029
-
1030
- | 参数 | 说明 |
1031
- | --- | --- |
1032
- | `[x] [y]` | 可选,目标坐标。缺省时需配合 `--id` 使用 |
1033
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1034
- | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]` 同时使用 |
1035
- | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1036
-
1037
- **示例:**
1038
-
1039
- ```bash
1040
- devecocli ui doubleclick 100 200
1041
- devecocli ui doubleclick 100 200 --device Phone
1042
- devecocli ui doubleclick --id photo_thumb
1043
- devecocli ui doubleclick --id photo_thumb --window main_window
1044
- ```
1045
-
1046
- ### `ui longclick`
1047
-
1048
- 长按指定坐标或节点 ID 的中心位置。
1049
-
1050
- **命令格式:**
1051
-
1052
- ```bash
1053
- devecocli ui longclick [x] [y] --device <name|serial> --id <id> --window <windowId>
1054
- ```
1055
-
1056
- **参数:**
1057
-
1058
- | 参数 | 说明 |
1059
- | --- | --- |
1060
- | `[x] [y]` | 可选,目标坐标。缺省时需配合 `--id` 使用 |
1061
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1062
- | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]` 同时使用 |
1063
- | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1064
-
1065
- **示例:**
1066
-
1067
- ```bash
1068
- devecocli ui longclick 100 200
1069
- devecocli ui longclick 100 200 --device Phone
1070
- devecocli ui longclick --id menu_item
1071
- devecocli ui longclick --id menu_item --window main_window
1072
- ```
1073
-
1074
- ### `ui swipe`
1075
-
1076
- 自定义滑动(指定起点、终点和速度)。
1077
-
1078
- **命令格式:**
1079
-
1080
- ```bash
1081
- devecocli ui swipe <x1> <y1> <x2> <y2> --device <name|serial> --speed <n>
1082
- ```
1083
-
1084
- **参数:**
1085
-
1086
- | 参数 | 说明 |
1087
- | --- | --- |
1088
- | `<x1> <y1> <x2> <y2>` | 必选,起点和终点坐标 |
1089
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1090
- | --speed \<n> | 可选,滑动速度(像素/秒),范围 `200` ~ `40000` |
1091
-
1092
- **示例:**
1093
-
1094
- ```bash
1095
- devecocli ui swipe 100 500 100 200
1096
- devecocli ui swipe 100 500 100 200 --device Phone
1097
- devecocli ui swipe 100 500 100 200 --speed 1000
1098
- ```
1099
-
1100
- ### `ui fling`
1101
-
1102
- 快速滑动(Fling)。
1103
-
1104
- **命令格式:**
1105
-
1106
- ```bash
1107
- devecocli ui fling <x1> <y1> <x2> <y2> --device <name|serial> --speed <n>
1108
- ```
1109
-
1110
- **参数:**
1111
-
1112
- | 参数 | 说明 |
1113
- | --- | --- |
1114
- | `<x1> <y1> <x2> <y2>` | 必选,起点和终点坐标 |
1115
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1116
- | --speed \<n> | 可选,滑动速度(像素/秒),范围 `200` ~ `40000` |
1117
-
1118
- **示例:**
1119
-
1120
- ```bash
1121
- devecocli ui fling 100 800 100 200
1122
- devecocli ui fling 100 800 100 200 --device Phone
1123
- devecocli ui fling 100 800 100 200 --speed 3000
1124
- ```
1125
-
1126
- ### `ui drag`
1127
-
1128
- 拖拽操作。
1129
-
1130
- **命令格式:**
1131
-
1132
- ```bash
1133
- devecocli ui drag <x1> <y1> <x2> <y2> --device <name|serial> --speed <n>
1134
- ```
1135
-
1136
- **参数:**
1137
-
1138
- | 参数 | 说明 |
1139
- | --- | --- |
1140
- | `<x1> <y1> <x2> <y2>` | 必选,起点和终点坐标 |
1141
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1142
- | --speed \<n> | 可选,滑动速度(像素/秒),范围 `200` ~ `40000` |
1143
-
1144
- **示例:**
1145
-
1146
- ```bash
1147
- # 拖拽操作
1148
- devecocli ui drag 100 500 100 200
1149
- devecocli ui drag 100 500 100 200 --device Phone
1150
- devecocli ui drag 100 500 100 200 --speed 1500
1151
- ```
1152
-
1153
- ### `ui dircfling`
1154
-
1155
- 向指定方向快速滑动。
1156
-
1157
- **命令格式:**
1158
-
1159
- ```bash
1160
- devecocli ui dircfling <direction> --device <name|serial>
1161
- ```
1162
-
1163
- **参数:**
1164
-
1165
- | 参数 | 说明 |
1166
- | --- | --- |
1167
- | `<direction>` | 必选,方向,取值为 `up`, `down`, `left`, `right` |
1168
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1169
-
1170
- **示例:**
1171
-
1172
- ```bash
1173
- devecocli ui dircfling up
1174
- devecocli ui dircfling down --device Phone
1175
- devecocli ui dircfling left
1176
- devecocli ui dircfling right
1177
- ```
1178
-
1179
- **与 `ui swipe` 的区别:**
1180
-
1181
- - `ui swipe` 需要指定精确的起点和终点坐标,支持自定义速度,适用于特定区域滑动。
1182
- - `ui dircfling` 仅需指定方向,使用系统默认速度,适用于页面滚动或列表快速滑动。
1183
-
1184
- ### `ui text`
1185
-
1186
- 输入文本到当前焦点、指定坐标或指定节点位置。
1187
-
1188
- **命令格式:**
1189
-
1190
- ```bash
1191
- devecocli ui text <text> [x] [y] --device <name|serial> --id <id> --window <windowId>
1192
- ```
1193
-
1194
- **参数:**
1195
-
1196
- | 参数 | 说明 |
1197
- | --- | --- |
1198
- | `<text>` | 必选,待输入的文本 |
1199
- | `[x] [y]` | 可选,目标坐标 |
1200
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1201
- | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]`同时使用 |
1202
- | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1203
-
1204
- **示例:**
1205
-
1206
- ```bash
1207
- devecocli ui text "Hello World"
1208
- devecocli ui text "Hello World" --device Phone
1209
- devecocli ui text "Hello World" 100 200
1210
- devecocli ui text "Hello World" --id search_box
1211
- devecocli ui text "Hello World" --id search_box --window main_window
1212
- ```
1213
-
1214
- ### `ui layout`
1215
-
1216
- 导出设备屏幕上的 UI 节点树,输出每个节点的类型、节点 ID、坐标边界 `[left,top,right,bottom]`、文本及可交互标志(`clickable` / `longClickable` / `scrollable` / `checkable`)。
1217
-
1218
- **命令格式:**
1219
-
1220
- ```bash
1221
- devecocli ui layout --device <name|serial> --id <id> --window <windowId> --all-windows --depth <n> --format <fmt> --mode <full|simplified>
1222
- ```
1223
-
1224
- **参数:**
1225
-
1226
- | 参数名 | 说明 |
1227
- | --- | --- |
1228
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1229
- | --id \<id> | 节点 ID,筛选树中匹配节点(仅输出匹配节点,不带子节点,强制 JSON)。不可与未筛选的全树输出同时视为列表查询 |
1230
- | --window \<windowId> | 目标窗口 ID,与 `--all-windows` 互斥 |
1231
- | --all-windows | 包含所有窗口,与 `--window` 互斥 |
1232
- | --depth \<n> | 树深度限制,`0`=不限制(默认),`1`=仅根,`2`=根+子节点 |
1233
- | --format | 输出格式,`default` 或 `json`,默认 `default` |
1234
- | --mode | 输出模式:`full`=完整原始树;`simplified`(默认)=折叠无 ID、无文本、无可交互标志的包装节点 |
1235
-
1236
- **示例:**
1237
-
1238
- ```bash
1239
- devecocli ui layout
1240
- devecocli ui layout --device Phone
1241
- devecocli ui layout --device Phone --format json
1242
- devecocli ui layout --mode full --depth 2
1243
- devecocli ui layout --id submit_button
1244
- devecocli ui layout --window 15 --format json
1245
- ```
1246
-
1247
- **说明:**
1248
-
1249
- - `--mode simplified`(默认)会折叠无 `id`、无 `text`、无任何可交互标志的包装节点,使输出聚焦于有意义的可操作节点;根节点始终保留。`--depth` 在折叠后截断。
1250
- - `--id` 用于按节点 ID 查询,返回所有匹配节点(`children` 置空),常配合 `ui click --id` / `ui text --id` 定位坐标。
1251
- - 节点 `bounds` 为 `[left, top, right, bottom]`,`ui click --id` 等交互命令据此取中心坐标点击。
1252
- - `--window` 的窗口 ID 可通过 `devecocli ui window list` 获取。
1253
-
1254
- ### `ui window list`
1255
-
1256
- 查看设备上的窗口列表,输出窗口 ID、名称、PID、所属屏幕 ID 及是否聚焦。为 `ui layout --window`、`ui click --window` 等命令提供窗口 ID。
1257
-
1258
- **命令格式:**
1259
-
1260
- ```bash
1261
- devecocli ui window list --device <name|serial> --format <fmt> --all
1262
- ```
1263
-
1264
- **参数:**
1265
-
1266
- | 参数名 | 说明 |
1267
- | --- | --- |
1268
- | --device \<name\|serial> | 目标设备,多设备时必填 |
1269
- | --format | 输出格式,`default` 或 `json`,默认 `default` |
1270
- | --all | 显示包含系统窗口在内的所有窗口;缺省时仅显示应用窗口(`type === 1`) |
1271
-
1272
- **示例:**
1273
-
1274
- ```bash
1275
- devecocli ui window list
1276
- devecocli ui window list --device Phone
1277
- devecocli ui window list --format json
1278
- devecocli ui window list --all
1279
- ```
1280
-
1281
- **说明:**
1282
-
1283
- - 聚焦窗口在 `default` 格式下高亮显示。
1284
- - 缺省时仅列出应用窗口;加 `--all` 可查看系统窗口,用于排查多窗口场景。
1285
-
1286
- ### `run`
1287
-
1288
- 构建应用后,将应用安装到真机设备或模拟器上,并启动执行
1289
-
1290
- **命令格式:**
1291
-
1292
- ```bash
1293
- devecocli run --module <m1> [m2...] --device <device> --product <product> --build-mode <mode> --ability <ability> --uninstall --skip-build --apply <fileName> --hotreload [action] --hotreload-apply <fileName>
1294
- ```
1295
-
1296
- **参数:**
1297
-
1298
- | 参数名 | 说明 |
1299
- | ------------ |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
1300
- | --module | 可选,模块名称,支持多个以空格分隔。如需指定模块的 `target` 信息,使用 `module@target` 形式。当工程中只有一个可运行模块( `entry` / `feature` / `shared` )时,可缺省 |
1301
- | --device | 设备名称或设备序列号,单设备时可选,多设备时必选 |
1302
- | --product | 可选,产品的名称,默认为 `default` |
1303
- | --build-mode | 可选,构建模式名称,默认为 `debug` |
1304
- | --ability | 可选,待启动的 `Ability` ,默认:模块 `module.json5` 中的`mainElement` |
1305
- | --uninstall | 可选,安装前先卸载已有应用 |
1306
- | --skip-build | 可选,跳过构建操作,直接安装应用 。\*\*说明:\*\*使用该参数时,需确保对应模块已有构建产物 |
1307
- | --apply \<fileName\> | 可选,快速增量部署。仅重编改动文件并安装,比全量 `run` 快。`<fileName>` 为 `.hvigor/` 下的改动文件清单(每行一个相对工程根路径)。前提:DevEco Studio ≥6.1.1,且先跑过一次 `devecocli run` |
1308
- | --hotreload [action] | 可选,使用热重载功能。使用热重载时,该命令需持续存活,以使热重载构建可以快速响应。当不需要时,执行 `devecocli run --hotreload stop` 去停止进程,释放资源 |
1309
- | --hotreload-apply \<fileName\> | 可选,热重载(不重启应用即生效)。读取 `.hvigor/<fileName>` 改动清单,经编译安装使改动生效。前提:后台 `--hotreload` 进程在跑。范围:仅单个模块(`--module` 必填),且只支持 `.ets` 文件 |
1310
-
1311
- **示例:**
1312
-
1313
- ```bash
1314
- devecocli run
1315
- devecocli run --module entry --device 127.0.0.1:5555
1316
- devecocli run --module library@phone --device 127.0.0.1:5555
1317
- devecocli run --module entry service uiextension --device 127.0.0.1:5555
1318
- devecocli run --product oversea --module entry --ability EntryAbility
1319
- devecocli run --build-mode release
1320
- devecocli run --uninstall
1321
- devecocli run --apply changes.txt
1322
- devecocli run --hotreload
1323
- devecocli run --hotreload stop
1324
- devecocli run --hotreload-apply changes.txt
1325
- ```
1326
-
1327
- **说明:**
1328
-
1329
- - 应用启动成功后(含 `--apply` 增量部署重启后),默认自动执行**冒烟检查**:确认应用进程仍存活,并对屏幕截图做纯色空白检测(pHash)。通过时输出 `Smoke: PASS`;进程已退出时输出 `Smoke: FAIL_CRASH`(附带 `crash_log:` 崩溃日志路径),检测到空白屏时输出 `Smoke: FAIL_BLANK`(附带 `screenshot:` 截图路径),检查失败时命令以非零码退出。证据仅在失败时落盘于工程 `.hvigor/smoke/` 下的本次运行独立目录:失败的截图与崩溃日志自检查结束起**保留 24 小时**(期间任何后续 run 都不会删除),之后由下一次 run 自动清理;`PASS` 的截图在判定后连同目录一并删除。进行中的并发检查互不影响,`.hvigor/` 不会随 run 次数堆积。
1330
- - 无可启动的 `Ability`,或使用 `--hotreload` / `--hotreload-apply` 时,跳过冒烟检查。
1331
- - 冒烟检查取证前默认等待 `1000` 毫秒(供应用完成冷启动),可通过环境变量 `DEVECO_CLI_SMOKE_WAIT_MS`(毫秒)调整:设为 `0` 立即取证;冷启动较慢的设备可适当调大以避免误报。
1332
-
1333
- ### `log`
1334
-
1335
- 查看`hilog`普通日志或崩溃日志
1336
-
1337
- **命令格式:**
1338
-
1339
- ```bash
1340
- devecocli log --device <device> --crash --level <level> --bundle-name <bundle-name> --keyword <keyword> --tail <num> --from <start> --to <end> --follow
1341
- ```
1342
-
1343
- **参数:**
1344
-
1345
- | 参数名 | 说明 |
1346
- | ------------- | -------------------------------------------------------------------------------------------------------------------------- |
1347
- | --device | 设备名称或设备序列号,单设备时可选,多设备时必选 |
1348
- | --crash | 可选,查看崩溃日志 |
1349
- | --level | 可选,日志级别,取值包括`D`( `Debug` )、`I`( `Info` )、`W`( `Warn` )、`E`( `Error` )、`F`( `Fatal` ) |
1350
- | --bundle-name | 可选,根据包名查看日志 |
1351
- | --keyword | 可选,根据关键词查看日志,关键词区分大小写 |
1352
- | --tail | 可选,显示最新的N行日志,取值为正整数 |
1353
- | --from | 可选,起始时间,单位为`m`和`s`,`m`和`s`为小写,默认为`s`,`start`的取值需要大于等于`end` |
1354
- | --to | 可选,结束时间,单位为`m`和`s`,`m`和`s`为小写,默认为`s` 。不可与--follow同时使用。**说明:** 如当前时间为05:00,`start`设置为30s,`end`设置为10s,则起始时间为04:30,结束时间为04:50 |
1355
- | --follow | 可选,实时输出日志。不可与--to同时使用 |
1356
-
1357
- **示例:**
1358
-
1359
- ```bash
1360
- devecocli log --level E
1361
- devecocli log --crash --bundle-name com.example.app
1362
- devecocli log --device 127.0.0.1:5555 --level W --keyword Init
1363
- devecocli log --tail 100 --from 5m --to 2m
1364
- devecocli log --follow --bundle-name com.example.app
1365
- ```
1366
-
1367
- ### `skills list`
1368
-
1369
- 查询可用的 `Skill`
1370
-
1371
- **命令格式:**
1372
-
1373
- ```bash
1374
- devecocli skills list --long
1375
- ```
1376
-
1377
- **参数:**
1378
-
1379
- | 参数名 | 说明 |
1380
- | --------- | ----------------------------------------------- |
1381
- | -l,--long | 可选,`Skill` 详情,包括描述和已安装的智能体列表。缺省时,仅显示 `Skill` 名称 |
1382
-
1383
- **示例:**
1384
-
1385
- ```bash
1386
- devecocli skills list
1387
- devecocli skills list --long
1388
- devecocli skills list -l
1389
- ```
1390
-
1391
- ### `skills find`
1392
-
1393
- 按关键词搜索 `Skill`
1394
-
1395
- **命令格式:**
1396
-
1397
- ```bash
1398
- devecocli skills find <keyword>
1399
- ```
1400
-
1401
- **参数:**
1402
-
1403
- | 参数名 | 说明 |
1404
- | ------- | -------- |
1405
- | keyword | 必选,搜索关键词 |
1406
-
1407
- **示例:**
1408
-
1409
- ```bash
1410
- devecocli skills find deveco
1411
- ```
1412
-
1413
- ### `skills add`
1414
-
1415
- 将 `Skill` 添加到智能体中
1416
-
1417
- **命令格式:**
1418
-
1419
- ```bash
1420
- devecocli skills add --all --agent <agents> --skill <skill-name> --project <path> --path <path> --force
1421
- ```
1422
-
1423
- **参数:**
1424
-
1425
- | 参数名 | 说明 |
1426
- | ---------- | --------------------------------------------------------- |
1427
- | --all | 可选,添加所有可用的 `Skill` ,与 `--skill` 二选一 |
1428
- | --agent | 可选,智能体名称,多个智能体时以英文逗号分隔。缺省时,添加到已检测到的智能体中 |
1429
- | --skill | 可选,待添加的 `Skill` 名称,与 `--all` 二选一 |
1430
- | --project | 可选,指定项目路径,将 `Skill` 添加到该工程项目中 |
1431
- | --path | 可选,指定路径,将 `Skill` 添加到该路径,不可与 `--project` 或 `--agent` 同时使用 |
1432
- | -f,--force | 可选,当目标位置已有同名 `Skill` 时,覆盖重添加 |
1433
-
1434
- **示例:**
1435
-
1436
- ```bash
1437
- devecocli skills add --all
1438
- devecocli skills add --skill skillname --agent agentname --force # skillname需替换成实际的Skill名称
1439
- devecocli skills add --skill skillname --project ./my-app # skillname需替换成实际的Skill名称
1440
- ```
1441
-
1442
- ### `skills remove`
1443
-
1444
- 从智能体中删除已添加的 `Skill`
1445
-
1446
- **命令格式:**
1447
-
1448
- ```bash
1449
- devecocli skills remove --skill <skill-name> --agent <agents> --project <path> --path <path>
1450
- ```
1451
-
1452
- **参数:**
1453
-
1454
- | 参数名 | 说明 |
1455
- | --------- | -------------------------------------------------------- |
1456
- | --skill | 必选,待删除的 `Skill` 名称 |
1457
- | --agent | 可选,智能体名称,多个智能体时以英文逗号分隔。缺省时,删除到已检测到的智能体中的 `Skill` |
1458
- | --project | 可选,指定项目路径,删除该项目中的 `Skill` |
1459
- | --path | 可选,指定路径,删除该项目中的 `Skill`,不可与 `--project` 或 `--agent` 同时使用 |
1460
-
1461
- **示例:**
1462
-
1463
- ```bash
1464
- devecocli skills remove --skill skillname # skillname需替换成实际的Skill名称
1465
- devecocli skills remove --skill skillname --agent agentname # skillname需替换成实际的Skill名称
1466
- ```
1467
-
1468
- ### `serve mcp`
1469
-
1470
- 启动本地 `MCP` 服务。智能体配置 `MCP` 服务后,可通过 `MCP` 协议调用下方列出的代码分析与语言特性工具。不同智能体平台配置 `MCP` 服务的界面不一样,一个智能体平台的配置示例如下。
1471
- 推荐通过 `devecocli init --mcp` 自动配置
1472
-
1473
- ```bash
1474
- {
1475
- "mcp": {
1476
- "deveco-mcp": {
1477
- "type": "local",
1478
- "command": [
1479
- "devecocli",
1480
- "serve",
1481
- "mcp"
1482
- ],
1483
- "environment":{
1484
- "PROJECT_PATH": "D:\\code\\sample_project", // 工程路径
1485
- "NODE_MAX_OLD_SPACE_SIZE": "8192", // 可选,设置内部node进程最大的老生代内存大小,默认为8192
1486
- "DEVECO_PATH": "D:\\Application\\DevEco Studio", // 可选,Deveco Studio的路径
1487
- "DEVECO_CLI_CPP_ENABLED": "true" // 可选,是否启用C++ LSP服务,默认为true,设为false可关闭
1488
- },
1489
- "enbale": true
1490
- }
1491
- }
1492
- }
1493
- ```
1494
-
1495
- #### MCP 工具
1496
-
1497
- `deveco-mcp` 服务遵循 [MCP](https://modelcontextprotocol.io) 规范,通过 `tools/list` 暴露工具、由模型经 `tools/call` 调用。每个工具由**名称**、**描述**和 **JSON Schema 入参**定义;返回值为 `content` 文本数组,`isError: true` 表示执行错误。
1498
-
1499
- **工具总览:**
1500
-
1501
- | 工具名 | 用途 | 支持语言 |
1502
- | --- | --- | --- |
1503
- | `check` | 静态语法分析,返回结构化诊断信息 | ArkTS、C/C++ |
1504
- | `hover` | 获取指定位置的悬浮信息(类型、文档) | ArkTS、C/C++ |
1505
- | `definition` | 查找符号定义位置 | ArkTS、C/C++ |
1506
- | `declaration` | 查找符号声明位置(ArkTS 中可能与定义不同) | ArkTS、C/C++ |
1507
- | `references` | 查找符号在全工程中的所有引用 | ArkTS、C/C++ |
1508
- | `implementation` | 查找符号的实现(如接口实现) | ArkTS、C/C++ |
1509
- | `workspaceSymbol` | 按名称在全工程搜索符号 | ArkTS、C/C++ |
1510
- | `documentSymbol` | 获取单文件的符号树(函数、类、变量及范围) | ArkTS、C/C++ |
1511
- | `callHierarchy` | 查询函数调用关系(incoming=调用方,outgoing=被调用方) | ArkTS 双向、C/C++ 仅 incoming |
1512
- | `restart` | 原地重启(重置状态 + 重新 sync/init),不杀进程、客户端不断开;ERROR 态可用 | ArkTS、C/C++(可按 target 单选) |
1513
-
1514
- **可用性说明:**
1515
-
1516
- - `check` 与 `restart` 始终注册;其余 7 个语言特性工具仅在 DevEco Studio 附带标准 LSP 服务入口(`standardIndex/index.js`)时注册,老版本将不暴露这些工具。
1517
- - 所有语言特性工具需项目进入 `READY` 状态(`ohpm install` + `hvigor sync` + LSP 初始化完成)后才可用;未就绪时返回 `please retry in N seconds`,模型可稍后重试。`restart` 例外:它正是用于把 server 从 `ERROR` 态拉回,调用后返回"约 10 秒后重试",后台异步重置并重新 sync/init。
1518
- - C/C++ 工具需要工程包含 C++ 模块;无 C++ 代码时返回 `No C++ code`。
1519
- - 支持的文件扩展名:ArkTS 为 `.ets`;C/C++ 为 `.c` `.cc` `.cpp` `.cxx` `.c++` `.h` `.hh` `.hpp` `.hxx` `.h++` `.ipp` `.ixx` `.inl` `.inc` `.tpp`。
1520
- - 不属于当前工程的路径会被拒绝。
1521
-
1522
- **入参定义:**
1523
-
1524
- ##### `check`
1525
-
1526
- 对传入的源文件进行静态语法分析并返回诊断信息,支持 ArkTS 与 C/C++ 在同一次调用中混合传入。
1527
-
1528
- | 参数 | 类型 | 必选 | 说明 |
1529
- | --- | --- | --- | --- |
1530
- | `files` | string[] | 是 | 待检查的源文件路径列表,相对工程根目录,至少 1 个 |
1531
-
1532
- ##### `hover` / `definition` / `declaration` / `references` / `implementation`
1533
-
1534
- 位置类语言特性,共享同一入参结构。返回该位置符号的类型/文档信息、定义/声明位置、引用列表或实现列表。
1535
-
1536
- | 参数 | 类型 | 必选 | 说明 |
1537
- | --- | --- | --- | --- |
1538
- | `file` | string | 是 | 源文件路径,相对工程根目录,支持 `.ets` 与 C/C++ 扩展名 |
1539
- | `line` | number | 是 | 行号,0-based |
1540
- | `character` | number | 是 | 列号(字符偏移),0-based |
1541
-
1542
- ##### `workspaceSymbol`
1543
-
1544
- 按名称在全工程搜索符号,无需打开具体文件。
1545
-
1546
- | 参数 | 类型 | 必选 | 说明 |
1547
- | --- | --- | --- | --- |
1548
- | `query` | string | 是 | 符号名称或片段,非空 |
1549
-
1550
- ##### `documentSymbol`
1551
-
1552
- 获取单个文件的符号树,适合文件概览、结构化拆解和大文件切片。
1553
-
1554
- | 参数 | 类型 | 必选 | 说明 |
1555
- | --- | --- | --- | --- |
1556
- | `file` | string | 是 | 源文件路径,相对工程根目录,支持 `.ets` 与 C/C++ 扩展名 |
1557
-
1558
- ##### `callHierarchy`
1559
-
1560
- 查询某位置函数的调用关系。
1561
-
1562
- | 参数 | 类型 | 必选 | 说明 |
1563
- | --- | --- | --- | --- |
1564
- | `file` | string | 是 | 源文件路径,相对工程根目录,支持 `.ets` 与 C/C++ 扩展名 |
1565
- | `line` | number | 是 | 行号,0-based |
1566
- | `character` | number | 是 | 列号(字符偏移),0-based |
1567
- | `direction` | enum | 是 | `incoming`=谁调用了该函数;`outgoing`=该函数调用了谁。ArkTS 支持双向,C/C++(clangd)仅 `incoming` |
1568
-
1569
- ##### `restart`
1570
-
1571
- 原地重启 MCP server:重置双侧状态并重新 sync/init(ohpm install + hvigor sync + compileNative + LSP 握手),不杀进程、客户端连接保持。用于 sync/init 失败导致 server 停在 `ERROR` 态时(免去退出并重开 agent)。fire-and-forget:立即返回"约 10 秒后重试",重置在后台异步进行。**注意:`restart` 仅在修复根因后用于恢复,不能修复错误的工程配置。若重启后再次失败,说明是持久性配置问题(oh-package.json5/build-profile.json5 无效、ohpm install 或 hvigor sync 失败、SDK 版本不符等),不要循环调用 `restart`,应请用户排查并修复工程后再重试。**
1572
-
1573
- | 参数 | 类型 | 必选 | 说明 |
1574
- | --- | --- | --- | --- |
1575
- | `target` | enum | 否 | 重启哪一侧:`arkts`(ArkTS ace-server)、`cpp`(C++ clangd)、`all`(双侧,默认)。省略等同 `all` |
1576
-
1577
- ### `serve lsp`
1578
-
1579
- 启动本地 `LSP` 语言服务。智能体配置 `LSP` 服务后,可通过 `LSP` 协议获取代码补全、跳转定义、悬浮提示、引用查找、诊断等语言特性。当前支持 `ArkTS`和 `clangd`。
1580
-
1581
- ```bash
1582
- {
1583
- "lsp": {
1584
- "ArkTS": {
1585
- "command": [
1586
- "devecocli",
1587
- "serve",
1588
- "lsp",
1589
- "--arkts"
1590
- ],
1591
- "extensions": [
1592
- ".ets"
1593
- ]
1594
- },
1595
- "clangd": {
1596
- "command": [
1597
- "devecocli",
1598
- "serve",
1599
- "lsp",
1600
- "--cpp"
1601
- ],
1602
- "extensions": [
1603
- ".c",
1604
- ".cpp",
1605
- ".cc",
1606
- ".cxx",
1607
- ".h",
1608
- ".hpp",
1609
- ".hxx",
1610
- ".hh"
1611
- ]
1612
- }
1613
- }
1614
- }
1615
- ```
1616
-
1617
- **参数:**
1618
-
1619
- | 参数名 | 说明 |
1620
- | --- | --- |
1621
- | `--arkts` | 与 `--cpp` 二选一,启动 ArkTS 语言服务(ace-server) |
1622
- | `--cpp` | 与 `--arkts` 二选一,启动 C/C++ 语言服务(clangd) |
1623
- | `--project-path <path>` | 可选,工程根路径,默认为当前工作目录 |
1624
- | `--auto-detect` | 可选,当前目录向下查找工程根(检查当前目录自身及其子目录,最多 3 层子目录);适用于 `--arkts` 和 `--cpp`;指定了 `--project-path` 则忽略 |
1625
-
1626
- ### `signature generate`
1627
-
1628
- 自动生成调试签名材料(包括p12密钥库、csr证书请求文件、p7b配置文件、cer证书文件),并将签名配置写入项目的 `build-profile.json5` 中。
1629
-
1630
- **命令格式:**
1631
-
1632
- ```bash
1633
- devecocli signature generate --product <product> --team-id <team-id> --force --help
1634
- ```
1635
-
1636
- **参数:**
1637
-
1638
- | 参数名 | 说明 |
1639
- |-----------------------|-----------------------------------------|
1640
- | --product \<product\> | 可选,指定product生成签名,默认为 `default` |
1641
- | --team-id \<team-id\> | 可选,指定生效的team-id,默认使用自身作为团队信息 |
1642
- | --force | 可选,强制覆盖已存在的证书文件 |
1643
- | --help,--h | 可选,查看帮助信息 |
1644
-
1645
- **示例:**
1646
-
1647
- ```bash
1648
- # 自动生成签名并写入工程配置
1649
- devecocli signature generate
1650
-
1651
- # 指定product
1652
- devecocli signature generate --product default
1653
-
1654
- # 指定team-id
1655
- devecocli signature generate --team-id 1222
1656
-
1657
- # 强制覆盖已存在的证书文件
1658
- devecocli signature generate --force
1659
-
1660
- # 查询帮助信息
1661
- devecocli signature generate --help
1662
- ```
1663
-
1664
- ## 常见问题
1665
-
1666
- [FAQ](https://gitcode.com/openharmony-sig/deveco-cli/wiki/FAQ.md)
1667
-
1668
- ## 开发
1669
-
1670
- ```bash
1671
- npm install
1672
- npm run dev
1673
- npm start -- <command>
1674
- npm run lint
1675
- npm run format
1676
- npm run build
1677
- ```
1678
-
1679
- - 架构与目录说明见 [`AGENTS.md`](./AGENTS.md)
1680
- - 如需参与维护,建议先阅读 `AGENTS.md` 中的约定与架构说明
1681
-
1682
- ## 许可证
1683
-
1684
- [MIT](./LICENSE)
1
+ <div align="center">
2
+ <h1>DevEco CLI</h1>
3
+ <p>一个面向 HarmonyOS 应用开发的统一命令行入口。</p>
4
+ <p>
5
+ <a href="https://www.npmjs.com/package/@deveco/deveco-cli"><img src="https://img.shields.io/npm/v/@deveco/deveco-cli.svg" alt="NPM Version" /></a>
6
+ <a href="https://www.npmjs.com/package/@deveco/deveco-cli"><img src="https://img.shields.io/npm/dm/@deveco/deveco-cli.svg" alt="NPM Downloads" /></a>
7
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/Node.js-%3E%3D22-green.svg" alt="Node.js" /></a>
8
+ <img src="https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-blue.svg" alt="Platform" />
9
+ <a href="https://developer.huawei.com/consumer/cn/download/"><img src="https://img.shields.io/badge/DevEco%20Studio-%3E%3D6.0.0-orange.svg" alt="DevEco Studio" /></a>
10
+ <img src="https://img.shields.io/badge/Command%20Line%20Tools-%3E%3D26.0.0-orange.svg" alt="Command Line Tools" />
11
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License" /></a>
12
+ </p>
13
+ </div>
14
+
15
+ `DevEco CLI` 将 `DevEco Studio` 工具链统一封装为一个 `CLI`,内置 `ohpm`、`hvigor`、`hdc`、`emulator`、`hilog`,同时集成 HarmonyOS 技能安装、项目脚手架、本地 HarmonyOS 文档检索和 `MCP` 服务。
16
+
17
+ > 关于数据采集与隐私(遥测打点内容、存储加密、上报及关闭方式),请参阅 [PRIVACY.md](./PRIVACY.md)。
18
+
19
+
20
+ ## 快速开始
21
+
22
+ ### 前置要求
23
+
24
+ - 操作系统为 `macOS` 、 `Windows` 或 `Linux`(需配置对应环境变量)
25
+ - 安装`Node.js`,推荐使用22及以上版本
26
+ - [DevEco Studio](https://developer.huawei.com/consumer/cn/download/) >= 6.0.0 或 [Command Line Tools](https://developer.huawei.com/consumer/cn/download/) >= 26.0.0
27
+ - **macOS**:必须安装在 `~/Applications` 或 `/Applications` 目录下。
28
+
29
+ ### 安装
30
+
31
+ ```bash
32
+ npm install -g @deveco/deveco-cli@latest
33
+ ```
34
+
35
+ 安装后可以通过以下命令更新到最新版本:
36
+
37
+ ```bash
38
+ devecocli update
39
+ ```
40
+
41
+ ### 最短工作流
42
+
43
+ ```bash
44
+ devecocli create --app-name MyApp
45
+ cd MyApp
46
+ devecocli run
47
+ devecocli log --level E
48
+ ```
49
+
50
+ ### 文档检索
51
+
52
+ ```bash
53
+ devecocli docs search List
54
+ devecocli docs read 开发指南/UI_Design_Kit_UI设计套件/UI_Design_Kit简介/ui-design-introduction
55
+ ```
56
+
57
+ 更多命令和参数可通过 `devecocli --help` 或各子命令的 `--help` 查看。
58
+
59
+ ## 环境变量
60
+
61
+ `devecocli` 当需要使用非默认安装路径、多版本并存时固定选型,Command Line Tools或在Linux下运行时,可通过以下环境变量显式指定工具链根:
62
+
63
+ | 名称 | 说明 |
64
+ | ------------------------ | ------------------------------------------------------ |
65
+ | `DEVECO_CLI_STUDIO_PATH` | 显式指定 DevEco Studio 安装根,优先级最高 |
66
+ | `DEVECO_CLI_CLT_PATH` | 显式指定 Command Line Tools 安装根 |
67
+
68
+ 完整优先级链:
69
+
70
+ ```text
71
+ DEVECO_CLI_STUDIO_PATH > DEVECO_CLI_CLT_PATH > Auto_Detect
72
+ ```
73
+
74
+ ### 平台与版本约束
75
+
76
+ | 平台 | DevEco Studio Auto_Detect | Command Line Tools | 最低版本 |
77
+ | ------- | --------------------------------------------- | ------------------ | ----------------------------- |
78
+ | Windows | 支持 | 可选 | Studio `6.0.0` / CLT `26.0.0` |
79
+ | macOS | 支持 | 可选 | 同上 |
80
+ | Linux | 不支持 | 必选 | CLT `26.0.0` |
81
+
82
+ ### 使用示例
83
+
84
+ ```bash
85
+ # 设置 DevEco Studio
86
+ export DEVECO_CLI_STUDIO_PATH="/Applications/DevEco-Studio.app" (可带或不带尾部 Contents)
87
+ devecocli device list
88
+
89
+ # 设置 CLT
90
+ export DEVECO_CLI_CLT_PATH=/opt/command-line-tools
91
+ devecocli device list
92
+ ```
93
+
94
+ ## AI Agent 集成
95
+
96
+ ### Agent 插件
97
+
98
+ 支持插件的 Agent 可加载 DevEco CLI 插件,获得内置 Skill 和 CLI 检查、安装及调用能力。
99
+
100
+ 插件使用与构建见 [插件说明](./.plugin/README.md),支持的 Agent 及其差异由 [平台配置](./.plugin/platforms.json) 定义。
101
+
102
+ ### 命令行安装 Skill / MCP
103
+
104
+ `DevEco CLI` 支持通过命令行将自身技能添加到 `Agent` 中。下面以 `opencode` 为例展示最短流程:
105
+
106
+ ```bash
107
+ # 1. 给 opencode 安装 deveco-cli 技能
108
+ devecocli init --agent opencode
109
+
110
+ # 2. 给 opencode 在当前 HarmonyOS 项目配置 MCP
111
+ devecocli init --mcp --agent opencode --project ./MyApp
112
+
113
+ # 3. 进入项目并启动 opencode
114
+ cd MyApp
115
+ opencode
116
+ ```
117
+
118
+ 也支持 `atomcode`等 Agent,使用方式相同:
119
+
120
+ ```bash
121
+ # 给 atomcode 安装技能
122
+ devecocli init --agent atomcode
123
+ ```
124
+
125
+ 如果 `Agent` 不在 `--agent` 参数取值范围内,可使用 `--path` 参数进行添加,参考如下命令:
126
+
127
+ ```bash
128
+ devecocli init --path D:\work\ARKTS\NewData
129
+ ```
130
+
131
+ 进入 `Agent` 后可以直接描述任务,例如:
132
+
133
+ - `Build this project in release mode and run it on my emulator`
134
+ - `Tail the last error logs from this app`
135
+ - `Check for syntax errors in src/main/ets/pages/Index.ets`
136
+
137
+ **说明:**
138
+ - 在`Windows`上搭配`devecocli`使用`opencode`时,推荐将[powershell 7](https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows?view=powershell-7.6) 作为默认执行终端。
139
+ - 在`Windows`上用`opencode`执行devecocli build/emulator start等指令时,若命令结束后终端无法正常退出,建议将默认终端切换为[powershell 7](https://learn.microsoft.com/en-us/powershell/scripting/install/install-powershell-on-windows?view=powershell-7.6)
140
+
141
+ ## 常用命令
142
+
143
+ | 命令 | 用途 |
144
+ | ------------------------- | ----------------------------------------- |
145
+ | `devecocli create` | 创建新的 HarmonyOS 项目 |
146
+ | `devecocli build` | 构建项目并产出 `.hap` / `.hsp` / `.har` / `.app` |
147
+ | `devecocli check lint` | 检查代码规范并输出实践建议与报告 |
148
+ | `devecocli check arkts` | 对 `.ets` 源文件执行 ArkTS 静态检查 |
149
+ | `devecocli run` | 安装并运行应用 |
150
+ | `devecocli device list` | 查看当前连接设备 |
151
+ | `devecocli emulator list` | 查看本地模拟器实例 |
152
+ | `devecocli ui layout` | 导出设备屏幕上的 UI 节点树(布局、坐标、节点 ID) |
153
+ | `devecocli ui window list` | 查看设备窗口列表(为 `ui layout` / `ui click` 等提供窗口 ID) |
154
+ | `devecocli ui screenshot` | 对真机或模拟器执行 UI 截图 |
155
+ | `devecocli ui click` | 点击指定坐标或节点 ID |
156
+ | `devecocli ui swipe` | 自定义滑动(指定起点、终点和速度) |
157
+ | `devecocli ui text` | 输入文本到焦点或指定位置 |
158
+ | `devecocli log` | 查看 `hilog` 或崩溃日志 |
159
+ | `devecocli docs search` | 搜索本地 HarmonyOS 文档 |
160
+ | `devecocli docs update` | 更新 HarmonyOS 文档到最新兼容版本 |
161
+ | `devecocli init` | 安装内置技能或配置 `MCP` |
162
+ | `devecocli skills` | 管理 HarmonyOS 技能市场中的技能 |
163
+ | `devecocli signature generate` | 自动生成调试签名材料并配置到项目 |
164
+ | `devecocli check compat` | 扫描源代码在两个 `SDK` 版本之间的 `API` 变更 |
165
+
166
+ ## 命令集
167
+
168
+ ### `help`
169
+
170
+ 查看版本、帮助信息以及所有子命令
171
+
172
+ **命令格式:**
173
+
174
+ ```bash
175
+ devecocli help
176
+ ```
177
+
178
+ ```text
179
+ # 返回结果
180
+ Usage: devecocli [options] [command]
181
+
182
+ HarmonyOS application development command line tool
183
+
184
+ Options:
185
+ -V, -v, --version output the version number
186
+ -h, --help display help for command
187
+
188
+ Commands:
189
+ build [options] Build the HarmonyOS project
190
+ run [options] Build and run the project on a connected device
191
+ update Update deveco-cli to the latest version
192
+ device Manage connected devices
193
+ emulator Manage emulator instances
194
+ auth Authentication commands (login, logout, status, team)
195
+ ui Inspect and interact with UI on a connected device
196
+ skills Manage HarmonyOS skills
197
+ log [options] Obtain device application logs
198
+ create [options] Scaffold a new HarmonyOS application project
199
+ init [options] Install the deveco-cli skill or configure the deveco-mcp server into AI agents
200
+ serve Host bundled auxiliary protocol servers
201
+ docs [options] Search and read HarmonyOS documentation from local docs directory
202
+ check Run DevEco project checks
203
+ signature Generate application signature
204
+ help [command] display help for command
205
+ ```
206
+
207
+ ### `init`
208
+
209
+ 将`deveco-cli` `Skill` 或者 `MCP` 服务配置到智能体中
210
+
211
+ **命令格式:**
212
+
213
+ ```bash
214
+ devecocli init --agent <agents> --project <path> --path <path> --skill --mcp --force
215
+ ```
216
+
217
+ **参数:**
218
+
219
+ | 参数名 | 说明 |
220
+ | ----------- | ----------------------------------------------------------------------------------------- |
221
+ | --agent | 可选,智能体名称,多个智能体名称以英文逗号分隔。缺省时配置到所有已检测到的智能体中 |
222
+ | --project | 可选,指定工程路径,将`deveco-cli` `Skill` 或 `MCP` 服务安装到该工程项目中 |
223
+ | --path | 可选,指定 `deveco-cli` `Skill` 的配置路径。不可与 `--project` 、`--agent` 、 `--mcp` 同时使用 |
224
+ | --skill | 可选,安装 `deveco-cli` `Skill`。不可与 `--mcp` 同时使用。`--mcp` 与 `--skill` 都缺省时,执行 `--skill` |
225
+ | --mcp | 可选,配置 `MCP` 服务,与 `--project` 一起使用表示配置工程级 `MCP` 服务,独立使用表示配置用户级 `MCP` 服务。不可与 `--skill` 同时使用 |
226
+ | -f, --force | 可选,当目标位置已存在 `deveco-cli` `Skill` 或 `MCP` 服务时,覆盖重装 |
227
+
228
+ **示例:**
229
+
230
+ ```bash
231
+ # 配置Skill
232
+ devecocli init -f # 安装或更新deveco-cli Skill
233
+ devecocli init --skill
234
+ devecocli init --agent agentname # agentname需替换为实际的智能体名称
235
+ devecocli init --path D:\work\ARKTS\NewData -f
236
+
237
+ # 配置MCP
238
+ devecocli init --mcp
239
+ devecocli init --mcp --agent agentname # agentname需替换为实际的智能体名称
240
+ devecocli init --mcp --project D:\work\ARKTS\NewData -f
241
+ ```
242
+
243
+ > **Skill 安装机制**:`devecocli init` 通过**目录软链接**(Windows 为 junction、macOS/Linux 为 symlink)将 `deveco-cli` Skill 链接到各智能体的 skills 目录,实体统一存放在 npm 包内的 `skills/deveco-cli/` 下。`devecocli update` 升级 CLI 后,实体随之更新,**无需重跑 `init`**——智能体下次使用 Skill 即读到新版本。`devecocli skills remove` 只删除智能体侧的链接、保留实体,随时可 `skills add` 装回。注意:`init` 会将目标位置已存在的 `deveco-cli` 目录替换为软链接(旧拷贝自动转换,已有文件会被覆盖,即使不加 `--force`)。
244
+
245
+ ### `docs search`
246
+
247
+ 将关键词搜索版本说明、指南、API参考、最佳实践、`FAQ` 、变更预告等中的内容
248
+
249
+ **命令格式:**
250
+
251
+ ```bash
252
+ devecocli docs search <keywords...> --catalog <name> --format <fmt> --limit <n>
253
+ ```
254
+
255
+ **参数:**
256
+
257
+ | 参数名 | 说明 |
258
+ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
259
+ | keywords... | 必选,搜索关键词,多个关键词用空格隔开 |
260
+ | --catalog | 可选,文档类别,取值包含`harmonyos-releases`(版本说明)、 `harmonyos-guides`(指南)、`harmonyos-references`(API参考)、`best-practices`(最佳实践)、`harmonyos-faqs`(FAQ)、`harmonyos-roadmap`(变更预告)、`all`(所有分类,默认) |
261
+ | --format | 可选,控制输出格式,取值包括 `default` 、`json` ,默认为`default` ,输出结果包括文档ID、标题、文档的概括内容 |
262
+ | --limit | 可选,设置搜索结果返回条数,默认为10 |
263
+
264
+ **示例:**
265
+
266
+ ```bash
267
+ devecocli docs search 沉浸光感
268
+ devecocli docs search '@State' '@Prop' --catalog best-practices --limit 10
269
+ devecocli docs search Row Column --format json
270
+ ```
271
+
272
+ ### `docs read`
273
+
274
+ 按文档ID查询文档的完整内容
275
+
276
+ **命令格式:**
277
+
278
+ ```bash
279
+ devecocli docs read <documentId>
280
+ ```
281
+
282
+ **参数:**
283
+
284
+ | 参数名 | 说明 |
285
+ | ---------- | ------- |
286
+ | documentId | 必选,文档ID |
287
+
288
+ **示例:**
289
+
290
+ ```bash
291
+ devecocli docs read 开发指南/UI_Design_Kit_UI设计套件/UI_Design_Kit简介/ui-design-introduction
292
+ ```
293
+
294
+ ### `docs catalog`
295
+
296
+ 查询文档分类和分类名称
297
+
298
+ **命令格式:**
299
+
300
+ ```bash
301
+ devecocli docs catalog --format <fmt>
302
+ ```
303
+
304
+ **参数:**
305
+
306
+ | 参数名 | 说明 |
307
+ | -------- | ----------------------------------------- |
308
+ | --format | 可选,输出格式,`default` 或 `json` ,默认为 `default` |
309
+
310
+ **示例:**
311
+
312
+ ```bash
313
+ devecocli docs catalog
314
+ devecocli docs catalog --format json
315
+ ```
316
+
317
+ ### `create`
318
+
319
+ 创建 HarmonyOS 应用工程,仅支持创建工程模板中的 `Empty Ability` 模板
320
+
321
+ **命令格式:**
322
+
323
+ ```bash
324
+ devecocli create --app-name <name> --project-path <path> --bundle-name <bundle> --api-level <level> --device-types <types...>
325
+ ```
326
+
327
+ **参数:**
328
+
329
+ | 参数名 | 说明 |
330
+ | -------------- | ----------------------------------------------------------------- |
331
+ | --app-name | 必选,应用名称 |
332
+ | --project-path | 可选,工程路径,默认为:`./<appname>` |
333
+ | --bundle-name | 可选,包名,默认为:`com.example.<appname>` ,`appname` 自动转为小写 |
334
+ | --api-level | 可选,API级别,最小值为17,最大值从安装的 `Deveco Studio` 的 `HarmonyOS` `SDK` 中自动获取 |
335
+ | --device-types | 可选,设备类型,可指定多个,写入 `module.json5` 的 `deviceTypes`,默认为 `phone`。支持 `phone`、`tablet`、`2in1`、`car`、`wearable`、`tv`;取值不在列表内时报错并列出全部合法值 |
336
+
337
+ **示例:**
338
+
339
+ ```bash
340
+ devecocli create --project-path ./MyApp --app-name MyApp
341
+ devecocli create --project-path ./MyApp --app-name MyApp --bundle-name com.acme.myapp --api-level 23
342
+ devecocli create --app-name MyApp
343
+ devecocli create --app-name MyApp --device-types tablet
344
+ devecocli create --app-name MyApp --device-types phone wearable
345
+ ```
346
+
347
+ ### `auth login`
348
+
349
+ 登录华为开发者账号,打开浏览器完成授权。交互式终端会先等待按 Enter 再拉起浏览器;传入 `--no-prompt` 可跳过确认直接拉起浏览器(供 Agent / 非交互终端使用;stdin 不是 TTY 时自动跳过)。Agent 执行登录或安装时,沿用会话中已有的相应授权,仅在缺少授权时询问。登录已获授权时直接运行 `devecocli auth login --no-prompt`,不再要求用户手动执行命令;用户仍需在浏览器完成认证。
350
+
351
+ **命令格式:**
352
+
353
+ ```bash
354
+ devecocli auth login --no-prompt
355
+ ```
356
+
357
+ **说明:**
358
+
359
+ - 海外账户暂不支持
360
+
361
+ ### `auth logout`
362
+
363
+ 登出并清除本地存储的凭据
364
+
365
+ **命令格式:**
366
+
367
+ ```bash
368
+ devecocli auth logout
369
+ ```
370
+
371
+ ### `auth status`
372
+
373
+ 显示当前登录的用户
374
+
375
+ **命令格式:**
376
+
377
+ ```bash
378
+ devecocli auth status
379
+ ```
380
+
381
+ ### `auth team list`
382
+
383
+ 列出当前用户已加入的团队
384
+
385
+ **命令格式:**
386
+
387
+ ```bash
388
+ devecocli auth team list
389
+ ```
390
+
391
+ **示例:**
392
+
393
+ ```bash
394
+ devecocli auth team list
395
+ ```
396
+
397
+ ### `build`
398
+
399
+ 编译并打包 HarmonyOS 工程或工程中的模块
400
+
401
+ **命令格式:**
402
+
403
+ ```bash
404
+ devecocli build --product <product> --modules <modules> --build-mode <mode>
405
+ ```
406
+
407
+ **参数:**
408
+
409
+ | 参数名 | 说明 |
410
+ | ------------ | ------------------------------------------------------------------------------------------------------- |
411
+ | --product | 可选,产品的名称,默认为 `default` |
412
+ | --modules | 可选,模块的名称。如需指定模块的 `target` 信息,使用 `module@target` 形式。当工程中只有一个模块时,可缺省;当工程中存在多个模块,且仅存在一个 `entry` 类型的模块时,可缺省 |
413
+ | --build-mode | 可选,构建模式,默认为 `debug` |
414
+
415
+ **示例:**
416
+
417
+ ```bash
418
+ devecocli build --build-mode release
419
+ devecocli build --modules entry library
420
+ devecocli build --modules library@phone
421
+ devecocli build --product oversea --modules entry --build-mode release
422
+ ```
423
+
424
+ **说明:**
425
+
426
+ - 选定模块的依赖会被自动解析和构建
427
+ - 执行`devecocli build --product <name>`命令后,产物为 `.app`
428
+ - 执行`devecocli build --product <name> --modules <m1>`命令后,产物为 `.hap` / `.hsp` / `.har`
429
+
430
+ ### `build clean`
431
+
432
+ 清理 HarmonyOS 项目的构建产物
433
+
434
+ **命令格式:**
435
+
436
+ ```bash
437
+ devecocli build clean
438
+ ```
439
+
440
+ ### `check compat`
441
+
442
+ 基于 `DevEco Studio` 自带的 `apkanalyzer-apiscan` 插件,扫描源代码在两个 `SDK` 版本之间的 `API` 变更情况。
443
+
444
+ **子命令:**
445
+
446
+ | 子命令 | 说明 |
447
+ | --- | --- |
448
+ | `devecocli check compat` | 默认执行工程级扫描 |
449
+ | `devecocli check compat --modules <m1> [m2...]` | 按模块扫描 |
450
+ | `devecocli check compat <file1> [file2...]` | 按文件扫描(仅支持 `.ets`/`.c`/`.cpp`) |
451
+ | `devecocli check compat versions` | 列出可用的目标 `SDK` 版本 |
452
+
453
+ **命令格式:**
454
+
455
+ ```bash
456
+ devecocli check compat [files...] --source-version <ver> --target-version <ver> [--modules <m...>] [--format <default|csv|json>] [--output-path <path>] [--limit <n>]
457
+ ```
458
+
459
+ **参数:**
460
+
461
+ | 参数名 | 说明 |
462
+ | --- | --- |
463
+ | `--source-version` | 必填,当前工程 `SDK` 版本 |
464
+ | `--target-version` | 必填,目标 `SDK` 版本 |
465
+ | `--modules` | 可选,指定扫描的模块(多个以空格分隔)。与文件参数互斥 |
466
+ | `--format` | 可选,输出格式。`default`/`csv`/`json`。默认 `default`(控制台输出文本,文件输出 `csv`) |
467
+ | `--output-path` | 可选,报告输出路径。目录或文件(扩展名必须与 `--format` 匹配) |
468
+ | `--limit` | 可选,控制台显示的最大记录数,默认 `100` |
469
+
470
+ **版本号说明:**
471
+
472
+ - 可用版本可通过 `devecocli check compat versions` 查看
473
+ - `zsh` 环境下版本号需用引号包裹(包含括号),例如 `"<source_version>"`、`"<target_version>"`
474
+
475
+ **`compat versions` 参数:**
476
+
477
+ | 参数名 | 说明 |
478
+ | --- | --- |
479
+ | `--format` | 可选,输出格式。`default` 或 `json`。默认 `default`(文本输出,每行一个版本号) |
480
+
481
+ **格式与输出组合:**
482
+
483
+ | 场景 | 允许的 `--format` | 行为 |
484
+ | --- | --- | --- |
485
+ | 控制台输出(无 `--output-path`) | `default` / `json` | `default` 输出文本表格,`json` 输出 `JSON` |
486
+ | 文件输出(`--output-path <file>`,扩展名必须匹配 `--format`) | `default` / `csv` / `json` | `default`/`csv` 写 `.csv` 文件;`json` 写 `.json` 文件 |
487
+ | 目录输出(`--output-path <dir>`,无扩展名) | `default` / `csv` / `json` | `default`/`csv` 生成 `apiChange-res{N}.csv`;`json` 生成 `apiChange-res{N}.json` |
488
+
489
+ **示例:**
490
+
491
+ ```bash
492
+ # 工程级扫描,输出到控制台
493
+ devecocli check compat --source-version "<source_version>" --target-version "<target_version>"
494
+
495
+ # 输出 JSON 到控制台
496
+ devecocli check compat --format json --source-version "<source_version>" --target-version "<target_version>"
497
+
498
+ # 输出报告到目录(默认 csv)
499
+ devecocli check compat --output-path ./report --source-version "<source_version>" --target-version "<target_version>"
500
+
501
+ # 输出 JSON 报告到目录(生成 apiChange-res{N}.json)
502
+ devecocli check compat --output-path ./report --format json --source-version "<source_version>" --target-version "<target_version>"
503
+
504
+ # 输出报告到指定文件
505
+ devecocli check compat --output-path ./report.json --format json --source-version "<source_version>" --target-version "<target_version>"
506
+
507
+ # 文件级扫描
508
+ devecocli check compat ./entry/src/main/ets/pages/Index.ets --source-version "<source_version>" --target-version "<target_version>"
509
+
510
+ # 模块级扫描
511
+ devecocli check compat --modules entry har1 --source-version "<source_version>" --target-version "<target_version>"
512
+ ```
513
+
514
+ ### `check lint`
515
+
516
+ 检查代码规范并输出实践建议与报告。
517
+
518
+ **命令格式:**
519
+
520
+ ```bash
521
+ devecocli check lint [path]
522
+ ```
523
+
524
+ **参数:**
525
+
526
+ | 参数名 | 说明 |
527
+ | ---------------------------- | --------------------------------------------------------------------- |
528
+ | `[path]` | 可选,待检查的文件或目录;默认使用 `build-profile.json5` 所在的项目根目录,否则使用当前目录 |
529
+ | `--config-path <path>` | Code Linter 配置文件路径,仅支持 `.json` 或 `.json5`;默认使用待检查项目根目录下的 `code-linter.json5`,显式指定时必须与待检查路径属于同一项目 |
530
+ | `--fix` | 自动修复可修复的问题 |
531
+ | `--incremental` | 仅检查 Git 未提交文件 |
532
+ | `--product <name>` | `build-profile.json5` 中定义的 product,默认为 `default` |
533
+ | `--format <default\|json>` | 完整报告格式;`default` 输出 Markdown,`json` 输出 JSON;要求 DevEco Studio ≥ 6.1.0 |
534
+ | `--output-path <path>` | 完整报告文件或目录,目录形式会自动生成带时间戳的报告文件;要求 DevEco Studio ≥ 6.1.0 |
535
+ | `--limit <number>` | 未指定 `--output-path` 时,限制终端显示的问题数量 |
536
+
537
+ `emulator` 版本要求: DevEco Studio ≥ 6.1.0
538
+
539
+ ### `check arkts`
540
+
541
+ 对 `.ets` 源文件执行 ArkTS 静态检查,基于 DevEco Studio 的 `etsStandaloneChecker`。
542
+
543
+ **命令格式:**
544
+
545
+ ```bash
546
+ devecocli check arkts [files...] [--fix] [--project <path>]
547
+ ```
548
+
549
+ **参数:**
550
+
551
+ | 参数名 | 说明 |
552
+ | --- | --- |
553
+ | `[files...]` | 可选,待检查的 `.ets` 文件列表;默认检查项目内所有 `.ets` 文件 |
554
+ | `--fix` | 自动修复高置信度错误(如缺失的 `export` 关键字) |
555
+ | `--project <path>` | 项目根目录;默认从当前目录自动检测 `build-profile.json5` |
556
+
557
+ **示例:**
558
+
559
+ ```bash
560
+ # 检查整个项目
561
+ devecocli check arkts
562
+
563
+ # 检查指定文件并自动修复
564
+ devecocli check arkts --fix entry/src/main/ets/pages/Index.ets
565
+
566
+ # 指定项目路径
567
+ devecocli check arkts --project /path/to/project
568
+ ```
569
+
570
+ ### `emulator list`
571
+
572
+ 查看模拟器实例
573
+
574
+ **命令格式:**
575
+
576
+ ```bash
577
+ devecocli emulator list [--format <table|json>]
578
+ devecocli emulator list --details
579
+ ```
580
+
581
+ **参数:**
582
+
583
+ | 参数名 | 说明 |
584
+ | --- | --- |
585
+ | `--format` | 可选,控制终端输出格式,取值为 `table` 或 `json`,默认为 `table`;`json` 返回固定的五字段精简结构 |
586
+ | `--details` | 可选,直接输出底层 `Emulator -list -details` 的完整 JSON,不做任何字段裁剪、重命名或补充;与 `--format` 互斥 |
587
+
588
+ **示例:**
589
+
590
+ ```bash
591
+ devecocli emulator list
592
+ devecocli emulator list --format json
593
+ devecocli emulator list --details
594
+ ```
595
+
596
+ ### `emulator start`
597
+
598
+ 启动模拟器。首次使用时,需要签署 HarmonyOS 软件许可与服务协议,具体请参考 `emulator license`
599
+
600
+ **命令格式:**
601
+
602
+ ```bash
603
+ devecocli emulator start [names...]
604
+ ```
605
+
606
+ **参数:**
607
+
608
+ | 参数名 | 说明 |
609
+ | ----------- | ----------------------------------------- |
610
+ | \[names...] | 必选,模拟器实例名称,多个名称用空格隔开。若名称中带有空格,则名称需要添加英文引号 |
611
+ | --hdcport \<port> | 可选,指定模拟器的 hdc 端口号,取值范围 10000-16555,对应 Emulator 的 `-hdcport` 参数。 |
612
+ | --boot-mode \<mode> | 可选,指定模拟器启动方式,对应 Emulator 的 `-bootMode` 参数,可选值:`coldboot`(冷启动,保留上次使用的应用、文件等数据)、`snapshot`(热启动,加载上次关闭时保存的快照,需创建模拟器时启用 Quick Boot)、`reset`(清除数据后冷启动)。不指定时按创建模拟器时选择的方式启动(无法识别创建方式时默认 snapshot)。 |
613
+ | --no-window | 可选,以无界面方式启动模拟器,对应 Emulator 的 `-noWindow` 参数;无图形界面的 Linux 环境必选。 |
614
+
615
+ **示例:**
616
+
617
+ ```bash
618
+ devecocli emulator start Phone
619
+ devecocli emulator start Phone1 Phone2
620
+ devecocli emulator start Phone --hdcport 12345
621
+ devecocli emulator start Phone --boot-mode coldboot --no-window
622
+ ```
623
+
624
+ **说明:**
625
+
626
+ - `emulator start` 命令仅支持启动 `release` 版本的模拟器
627
+
628
+ ### `emulator stop`
629
+
630
+ 关闭模拟器
631
+
632
+ **命令格式:**
633
+
634
+ ```bash
635
+ devecocli emulator stop [names...]
636
+ ```
637
+
638
+ **参数:**
639
+
640
+ | 参数名 | 说明 |
641
+ | ----------- | ----------------------------------------- |
642
+ | \[names...] | 必选,模拟器实例名称,多个名称用空格隔开。若名称中带有空格,则名称需要添加英文引号 |
643
+
644
+ **示例:**
645
+
646
+ ```bash
647
+ devecocli emulator stop Phone
648
+ devecocli emulator stop 127.0.0.1:5555
649
+ ```
650
+
651
+ ### `emulator` 场景操作
652
+
653
+ 控制运行中的模拟器实例,直接映射 DevEco Studio 内置 Emulator 公开命令行参数。新增场景控制命令要求 Emulator 7.0 或更高版本;低版本会直接提示升级。截图不属于模拟器场景操作,统一通过 `devecocli ui screenshot` 执行。
654
+
655
+ **示例:**
656
+
657
+ ```bash
658
+ devecocli emulator shake --target Phone
659
+ devecocli emulator power --target Phone
660
+ devecocli emulator rotate left --target Phone
661
+ devecocli emulator volume up --target Phone
662
+ devecocli emulator fold half-open --target Phone
663
+ devecocli emulator battery --target Phone --level 90
664
+ devecocli emulator battery --target Phone --status charging
665
+ devecocli emulator battery --target Phone --level 80 --status charging
666
+ devecocli emulator geolocation --target Phone --longitude 116.40024 --latitude 39.908
667
+ devecocli emulator scene outdoorRunning --target Phone
668
+ devecocli emulator sensor --target Phone --heartrate 80
669
+ ```
670
+
671
+ **说明:**
672
+
673
+ - `--target` 支持模拟器名称或 `127.0.0.1:<port>` 序列号。
674
+ - `battery --level` 与 `battery --status` 可同时传入(一次调用同时设置电量与充电状态)。
675
+ - `battery --level` 会自动查询模拟器当前充电状态:充电时取值范围为整数 `[0, 100]`,未充电时为 `[1, 100]`。
676
+ - `battery --status` 取值为 `charging` 或 `discharging`。
677
+ - `--level 0` 与 `--status discharging` 组合非法(电量 0 仅在充电时允许),会被拒绝。
678
+ - `geolocation` 支持 `--longitude`、`--latitude`、`--altitude`、`--direction`。
679
+ - `scene` 取值为 `outdoorRunning`、`outdoorCycling`、`drivingNavigation`。
680
+ - `sensor` 支持 `--light-intensity`、`--humidity`、`--temperature`、`--steps`、`--heartrate`,可同时传入多个。
681
+ - `geolocation`/`battery`/`sensor` 多参数为逐项串行下发、非原子:第 N 项失败时前 N−1 项已生效且不回滚,建议失败后整体重跑。
682
+ - `fold <state>` 会根据目标模拟器的设备类型校验状态,设备与参数必须匹配:
683
+
684
+ | 设备类型 | 支持的 `state` |
685
+ | --- | --- |
686
+ | `foldable` | `open`、`half-open`、`close` |
687
+ | `2in1_foldable` | `open`、`vertical-open`、`half-open`、`close` |
688
+ | `triplefold` | `single`、`double`、`triple`、`left-folded-right-half-folded`、`left-half-folded-right-expanded`、`left-expanded-right-folded`、`left-half-folded-right-folded`、`left-expanded-right-half-folded`、`left-half-folded-right-half-folded` |
689
+
690
+ 校验以目标模拟器实际返回的 `deviceType` 为准。非上述三种设备类型以及不属于目标设备类型的状态会在命令下发前被拒绝。校验通过后,底层映射为 `Emulator -instance <name> -foldedState <state>`。
691
+ - 设置 `DEVECO_CLI_DEBUG=1` 可查看底层命令映射,例如 `Emulator -instance <name> -shake`。
692
+
693
+ ### `emulator create`
694
+
695
+ 创建模拟器
696
+
697
+ **命令格式:**
698
+
699
+ ```bash
700
+ devecocli emulator create <name> \
701
+ --device-type <type> \
702
+ --os-version <version> \
703
+ [--instance-path <path>] \
704
+ [--image-root <path>] \
705
+ [--screen-profile <model>] \
706
+ [--screen <config...>] \
707
+ [--storage <size>] \
708
+ [--memory <size>] \
709
+ [--hot-boot <true|false>] \
710
+ [--force]
711
+ ```
712
+
713
+ **参数:**
714
+
715
+ | 参数名 | 说明 |
716
+ | --- | --- |
717
+ | `name` | 必选,模拟器名称 |
718
+ | `--device-type` | 必选,指定模拟器产品类型,支持的产品类型以官方设备支持类型为准,不区分大小写 |
719
+ | `--os-version` | 必选,模拟器镜像版本 |
720
+ | `--instance-path` / `--path` | 可选,模拟器实例路径 |
721
+ | `--image-root` | 可选,模拟器镜像路径 |
722
+ | `--screen-profile` | 可选,模拟器设备型号,例如 `Mate 70 Pro` |
723
+ | `--screen` | 可选,屏幕配置,格式为 `宽度(px) 高度(px) DPI 屏幕对角线长度(inch)`;宽度和高度范围为 720~3500 px,DPI 范围为 240~640,屏幕对角线长度范围为 3.5~9 inch;折叠屏模拟器传入两组配置 |
724
+ | `--storage` | 可选,存储空间,范围 `2–1023`,单位 G |
725
+ | `--memory` | 可选,运行内存,范围 `2–32`,单位 G |
726
+ | `--hot-boot` | 可选,取值为 `true` 或 `false`,从 26.0.0 Beta1 开始支持;API 26 及以上未指定时默认为 `true` |
727
+ | `--force` | 可选,覆盖已有同名的模拟器 |
728
+
729
+ `--screen-profile` 和 `--screen` 可同时指定,此时使用 `--screen`。
730
+
731
+ **示例:**
732
+
733
+ ```bash
734
+ devecocli emulator create MyPhone --device-type phone --os-version "HarmonyOS 6.0.1(21)"
735
+
736
+ devecocli emulator create MyPhone \
737
+ --device-type phone \
738
+ --os-version "HarmonyOS 6.0.1(21)" \
739
+ --screen-profile "Mate 70 Pro" \
740
+ --storage 8 \
741
+ --memory 8
742
+
743
+ devecocli emulator create Foldable \
744
+ --device-type foldable \
745
+ --os-version "HarmonyOS 6.0.1(21)" \
746
+ --screen "2200 2480 480 7.8" "1080 2480 480 6.4"
747
+ ```
748
+
749
+ ### `emulator delete`
750
+
751
+ 删除模拟器
752
+
753
+ **命令格式:**
754
+
755
+ ```bash
756
+ devecocli emulator delete <name> [--instance-path <path>]
757
+ ```
758
+
759
+ **参数:**
760
+
761
+ | 参数名 | 说明 |
762
+ | --- | --- |
763
+ | `name` | 必选,模拟器实例名称或序列号 |
764
+ | `--instance-path` / `--path` | 可选,模拟器实例路径;删除通过自定义路径创建的模拟器时,需传入创建时使用的同一路径 |
765
+
766
+ **示例:**
767
+
768
+ ```bash
769
+ devecocli emulator delete MyPhone
770
+
771
+ devecocli emulator delete MyPhone --instance-path /custom/instance/path
772
+ ```
773
+
774
+ ### `emulator image list`
775
+
776
+ 查询模拟器镜像列表
777
+
778
+ **命令格式:**
779
+
780
+ ```bash
781
+ devecocli emulator image list --device-type <type> --all --format <format>
782
+ ```
783
+
784
+ **参数:**
785
+
786
+ | 参数名 | 说明 |
787
+ | ------------- | -------------------------------------------------------------------------------------------------------------------------- |
788
+ | --device-type | 可选,模拟器设备类型,支持 `phone` , `foldable` , `widefold` , `triplefold` , `tablet` , `2in1` , `2in1 foldable` , `tv` , `wearable` |
789
+ | --all | 可选,查询已下载和未下载的所有镜像 |
790
+ | --format | 可选,控制输出格式,取值为 `table` 或 `json` ,默认为 `table` |
791
+
792
+ **示例:**
793
+
794
+ ```bash
795
+ devecocli emulator image list
796
+ devecocli emulator image list --all
797
+ devecocli emulator image list --device-type phone
798
+ devecocli emulator image list --format json
799
+ ```
800
+
801
+ ### `emulator image download`
802
+
803
+ 下载模拟器镜像。首次使用时,需要签署 HarmonyOS `SDK` 许可协议,具体请参考 `emulator license`
804
+
805
+ **命令格式:**
806
+
807
+ ```bash
808
+ devecocli emulator image download --device-type <type> --os-version <version> --force
809
+ ```
810
+
811
+ **参数:**
812
+
813
+ | 参数名 | 说明 |
814
+ | ------------- | ------------------------------------------------------------------------------------------------------------------------------- |
815
+ | --device-type | 必选,模拟器设备类型,支持 `phone` , `foldable` , `widefold` , `triplefold` , `tablet` , `2in1` , `2in1 foldable` , `tv` , `wearable` ,全小写 |
816
+ | --os-version | 必选,模拟器镜像版本 |
817
+ | --force | 可选,覆盖已有的模拟器镜像 |
818
+
819
+ **示例:**
820
+
821
+ ```bash
822
+ devecocli emulator image download --device-type phone --os-version "HarmonyOS 6.0.1(21)" --force
823
+ ```
824
+
825
+ **说明:**
826
+
827
+ - `emulator image download` 命令仅支持下载 `release` 版本的模拟器镜像
828
+
829
+ ### `emulator image remove`
830
+
831
+ 删除模拟器镜像
832
+
833
+ **命令格式:**
834
+
835
+ ```bash
836
+ devecocli emulator image remove --device-type <type> --os-version <version>
837
+ ```
838
+
839
+ **参数:**
840
+
841
+ | 参数名 | 说明 |
842
+ | ------------- | ------------------------------ |
843
+ | --device-type | 必选,模拟器设备类型,与下载镜像的device-type一致 |
844
+ | --os-version | 必选,模拟器镜像版本,与下载镜像的os-version一致 |
845
+
846
+ **示例:**
847
+
848
+ ```bash
849
+ devecocli emulator image remove --device-type phone --os-version "HarmonyOS 6.0.1(21)"
850
+ ```
851
+
852
+ ### `emulator license view`
853
+
854
+ 查看协议文本(只读)
855
+
856
+ **命令格式:**
857
+
858
+ ```bash
859
+ devecocli emulator license view
860
+ ```
861
+
862
+ ### `emulator license`
863
+
864
+ 交互式查看并接受协议。打印完整协议文本后提示 y/N 确认。使用模拟器需要同意 HarmonyOS 软件许可与服务协议,下载镜像需要同意 HarmonyOS `SDK` 许可协议。若已同意则直接提示已接受。非交互终端下会报错,请改用 `emulator license accept`
865
+
866
+ **命令格式:**
867
+
868
+ ```bash
869
+ devecocli emulator license
870
+ ```
871
+
872
+ ### `emulator license accept`
873
+
874
+ 非交互式同意模拟器所有协议,直接写入同意记录,跳过协议展示和确认提示。适用于 Agent、自动化脚本、CI 或非交互终端环境。若已同意则直接提示已接受。Agent 遇到协议阻塞时,沿用用户已有的协议接受授权,直接执行此命令,成功后继续原操作;仅在缺少授权时询问。需要查看协议内容时使用只读的 `devecocli emulator license view`。
875
+
876
+ **命令格式:**
877
+
878
+ ```bash
879
+ devecocli emulator license accept
880
+ ```
881
+
882
+ ### `device list`
883
+
884
+ 查询所有已连接的设备,包括真机设备和运行中的模拟器
885
+
886
+ **命令格式:**
887
+
888
+ ```bash
889
+ devecocli device list [--format <table|json>]
890
+ ```
891
+
892
+ **参数:**
893
+
894
+ | 参数名 | 说明 |
895
+ | --- | --- |
896
+ | --format | 可选,输出格式。可选值:`table`、`json`,默认 `table` |
897
+
898
+ ### `device view`
899
+
900
+ 查询已连接的设备的详细信息,包括设备序列号、设备名称、设备类型、 `OS` 版本等
901
+
902
+ **命令格式:**
903
+
904
+ ```bash
905
+ devecocli device view [--target <serialOrName>] [--format <table|json>]
906
+ ```
907
+
908
+ **参数:**
909
+
910
+ | 参数名 | 说明 |
911
+ | ----------- | ------------------------------------- |
912
+ | -t,--target | 可选,目标设备名称或序列号。多设备缺省时,会列出所有已连接设备序列号和名称 |
913
+ | --format | 可选,输出格式。可选值:`table`、`json`,默认 `table` |
914
+
915
+ **示例:**
916
+
917
+ ```bash
918
+ devecocli device view
919
+ devecocli device view --target 127.0.0.1:5555
920
+ devecocli device view -t "My Device Name"
921
+ devecocli device view -t 127.0.0.1:5555 --format json
922
+ ```
923
+
924
+ ### `device file`
925
+
926
+ 在主机与设备(真机或模拟器)之间传输文件,底层映射为 `hdc -t <serial> file send/recv <src> <dst>`。
927
+
928
+ **命令格式:**
929
+
930
+ ```bash
931
+ devecocli device file [--device <name|serial>] send <src> <dst>
932
+ devecocli device file [--device <name|serial>] recv <src> <dst>
933
+ ```
934
+
935
+ **参数:**
936
+
937
+ | 参数名 | 说明 |
938
+ | --- | --- |
939
+ | --device | 可选,目标设备名称或序列号。单设备可省略,多设备时必填 |
940
+ | send <src> <dst> | 子命令,上传本地文件到设备 `<src>`(本地) → `<dst>`(设备端) |
941
+ | recv <src> <dst> | 子命令,下载设备文件到主机 `<src>`(设备端) → `<dst>`(本地) |
942
+
943
+ **示例:**
944
+
945
+ ```bash
946
+ devecocli device file send ./local.txt /data/local/tmp/remote.txt
947
+ devecocli device file recv /data/local/tmp/remote.txt ./local.txt --device 127.0.0.1:5555
948
+ ```
949
+
950
+ ### `device sqlite3`
951
+
952
+ 在设备上执行 `sqlite3`,底层映射为 `hdc -t <serial> shell sqlite3 <db-path> [args...]`,后续参数原样透传给设备的 `sqlite3`。
953
+
954
+ **命令格式:**
955
+
956
+ ```bash
957
+ devecocli device sqlite3 [--device <name|serial>] <db-path> [args...]
958
+ ```
959
+
960
+ **参数:**
961
+
962
+ | 参数名 | 说明 |
963
+ | --- | --- |
964
+ | --device | 可选,目标设备名称或序列号。单设备可省略,多设备时必填 |
965
+ | db-path | 设备端 SQLite 数据库文件路径 |
966
+ | args | 可选,透传给设备 `sqlite3` 的参数,如 `-json`、`-header`、`-readonly`、SQL 语句、点命令等 |
967
+
968
+ **示例:**
969
+
970
+ ```bash
971
+ devecocli device sqlite3 /data/app/el2/100/database/com.example.app/foo.db "select * from user limit 5" -json
972
+ ```
973
+
974
+ ### `ui screenshot`
975
+
976
+ 对真机或模拟器执行 UI 截图。
977
+
978
+ **命令格式:**
979
+
980
+ ```bash
981
+ devecocli ui screenshot --device <name|serial> --display <displayId> --path <path>
982
+ ```
983
+
984
+ **参数:**
985
+
986
+ | 参数 | 说明 | 默认值 |
987
+ | ------------------------ | ------------------------ | ---------- |
988
+ | --device \<name\|serial> | 真机或模拟器名称/序列号;多设备时必填 | 单设备自动选择 |
989
+ | --display \<displayId> | 目标屏幕 ID,可选 | 默认屏幕 |
990
+ | --path \<path> | 必填,文件夹路径或 PNG 文件路径;支持相对于当前目录的路径,目录必须存在且可写,目标文件不能已存在 | 无 |
991
+
992
+ **示例:**
993
+
994
+ ```bash
995
+ mkdir -p screenshots
996
+ devecocli ui screenshot --device Phone --path ./screenshots
997
+ devecocli ui screenshot --device Phone --display 0 --path ./screenshots/phone.png
998
+ ```
999
+
1000
+ **说明:**
1001
+
1002
+ - `ui screenshot` 支持真机和模拟器。
1003
+ - 仅有一个可用设备时可省略 `--device`,多个设备同时连接时必须指定。
1004
+ - `--path` 可以使用相对于当前目录的路径。可以指定已存在的文件夹并自动生成 PNG 文件名,也可以指定完整的 PNG 文件路径;不会自动创建目录或覆盖已有文件。
1005
+ - 截图能力统一通过 `ui screenshot` 提供,不放在模拟器场景操作命令中。
1006
+ - 截图统一使用 `hdc shell snapshot_display` 和 `hdc file recv` 实现;设置 `DEVECO_CLI_DEBUG=1` 可查看实际执行命令。
1007
+
1008
+ ### `ui screenrecord`
1009
+
1010
+ 录制真机屏幕并保存为 MP4。仅支持提供系统录屏服务和 `mediatool` 的真机,不支持模拟器。
1011
+
1012
+ **命令格式:**
1013
+
1014
+ ```bash
1015
+ devecocli ui screenrecord [start] --device <name|serial> --path <dir|file.mp4>
1016
+ devecocli ui screenrecord stop --device <name|serial> [--force]
1017
+ devecocli ui screenrecord status --device <name|serial> [--format table|json]
1018
+ ```
1019
+
1020
+ **参数:**
1021
+
1022
+ | 参数 | 说明 | 默认值 |
1023
+ | --- | --- | --- |
1024
+ | --device \<name\|serial> | 设备名称或序列号;多设备时必填 | 单设备自动选择 |
1025
+ | --path \<dir\|file.mp4> | 直接录制或 `start` 时必填;已有可写目录或新 MP4 文件路径,父目录必须存在 | 无 |
1026
+ | --force | 仅用于 `stop`,允许停止非本 CLI 登记的录屏;此类视频不下载,到设备图库查看 | 不启用 |
1027
+ | --format \<table\|json> | 仅用于 `status`,指定输出格式 | table |
1028
+
1029
+ **示例:**
1030
+
1031
+ ```bash
1032
+ mkdir -p recordings
1033
+ # 直接录制,按 Ctrl+C 停止并保存
1034
+ devecocli ui screenrecord --device Phone --path ./recordings/demo.mp4
1035
+
1036
+ # 分步控制
1037
+ devecocli ui screenrecord start --device Phone --path ./recordings
1038
+ devecocli ui screenrecord status --device Phone --format json
1039
+ devecocli ui screenrecord stop --device Phone
1040
+ ```
1041
+
1042
+ **说明:**
1043
+
1044
+ - 不带子命令时进入交互录制;`start` 确认启动后立即返回,之后用 `stop` 停止并保存到启动时指定的位置。
1045
+ - `--path` 支持相对路径;输入目录则自动生成文件名,不创建目录、不覆盖已有文件。录制期间目标被占用时,使用带 `-recovered` 后缀的文件名。
1046
+ - `status` 返回 `recording`(本 CLI 录屏)、`busy`(非本 CLI 登记的录屏)或 `idle`(未录屏);查询不会改变设备状态。
1047
+ - 设备端已停止或视频保存失败时,可重试 `stop` 取回;再次启动会删除中断会话登记,不取回旧视频,原件保留在设备图库。跨终端操作需使用同一个 `DEVECO_CLI_DATA_DIR`。
1048
+ - 设备图库保留视频原件。进程被强制结束且登记尚未完成时,需检查设备状态和图库。
1049
+
1050
+ ### `ui click`
1051
+
1052
+ 点击指定坐标或节点 ID 的中心位置。
1053
+
1054
+ **命令格式:**
1055
+
1056
+ ```bash
1057
+ devecocli ui click [x] [y] --device <name|serial> --id <id> --window <windowId>
1058
+ ```
1059
+
1060
+ **参数:**
1061
+
1062
+ | 参数 | 说明 |
1063
+ | --- | --- |
1064
+ | `[x] [y]` | 可选,目标坐标。缺省时需配合 `--id` 使用 |
1065
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1066
+ | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]` 同时使用 |
1067
+ | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1068
+
1069
+ **示例:**
1070
+
1071
+ ```bash
1072
+ devecocli ui click 100 200
1073
+ devecocli ui click 100 200 --device Phone
1074
+ devecocli ui click --id submit_button
1075
+ devecocli ui click --id submit_button --window main_window
1076
+ ```
1077
+
1078
+ ### `ui doubleclick`
1079
+
1080
+ 双击指定坐标或节点 ID 的中心位置。
1081
+
1082
+ **命令格式:**
1083
+
1084
+ ```bash
1085
+ devecocli ui doubleclick [x] [y] --device <name|serial> --id <id> --window <windowId>
1086
+ ```
1087
+
1088
+ **参数:**
1089
+
1090
+ | 参数 | 说明 |
1091
+ | --- | --- |
1092
+ | `[x] [y]` | 可选,目标坐标。缺省时需配合 `--id` 使用 |
1093
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1094
+ | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]` 同时使用 |
1095
+ | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1096
+
1097
+ **示例:**
1098
+
1099
+ ```bash
1100
+ devecocli ui doubleclick 100 200
1101
+ devecocli ui doubleclick 100 200 --device Phone
1102
+ devecocli ui doubleclick --id photo_thumb
1103
+ devecocli ui doubleclick --id photo_thumb --window main_window
1104
+ ```
1105
+
1106
+ ### `ui longclick`
1107
+
1108
+ 长按指定坐标或节点 ID 的中心位置。
1109
+
1110
+ **命令格式:**
1111
+
1112
+ ```bash
1113
+ devecocli ui longclick [x] [y] --device <name|serial> --id <id> --window <windowId>
1114
+ ```
1115
+
1116
+ **参数:**
1117
+
1118
+ | 参数 | 说明 |
1119
+ | --- | --- |
1120
+ | `[x] [y]` | 可选,目标坐标。缺省时需配合 `--id` 使用 |
1121
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1122
+ | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]` 同时使用 |
1123
+ | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1124
+
1125
+ **示例:**
1126
+
1127
+ ```bash
1128
+ devecocli ui longclick 100 200
1129
+ devecocli ui longclick 100 200 --device Phone
1130
+ devecocli ui longclick --id menu_item
1131
+ devecocli ui longclick --id menu_item --window main_window
1132
+ ```
1133
+
1134
+ ### `ui swipe`
1135
+
1136
+ 自定义滑动(指定起点、终点和速度)。
1137
+
1138
+ **命令格式:**
1139
+
1140
+ ```bash
1141
+ devecocli ui swipe <x1> <y1> <x2> <y2> --device <name|serial> --speed <n>
1142
+ ```
1143
+
1144
+ **参数:**
1145
+
1146
+ | 参数 | 说明 |
1147
+ | --- | --- |
1148
+ | `<x1> <y1> <x2> <y2>` | 必选,起点和终点坐标 |
1149
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1150
+ | --speed \<n> | 可选,滑动速度(像素/秒),范围 `200` ~ `40000` |
1151
+
1152
+ **示例:**
1153
+
1154
+ ```bash
1155
+ devecocli ui swipe 100 500 100 200
1156
+ devecocli ui swipe 100 500 100 200 --device Phone
1157
+ devecocli ui swipe 100 500 100 200 --speed 1000
1158
+ ```
1159
+
1160
+ ### `ui fling`
1161
+
1162
+ 快速滑动(Fling)。
1163
+
1164
+ **命令格式:**
1165
+
1166
+ ```bash
1167
+ devecocli ui fling <x1> <y1> <x2> <y2> --device <name|serial> --speed <n>
1168
+ ```
1169
+
1170
+ **参数:**
1171
+
1172
+ | 参数 | 说明 |
1173
+ | --- | --- |
1174
+ | `<x1> <y1> <x2> <y2>` | 必选,起点和终点坐标 |
1175
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1176
+ | --speed \<n> | 可选,滑动速度(像素/秒),范围 `200` ~ `40000` |
1177
+
1178
+ **示例:**
1179
+
1180
+ ```bash
1181
+ devecocli ui fling 100 800 100 200
1182
+ devecocli ui fling 100 800 100 200 --device Phone
1183
+ devecocli ui fling 100 800 100 200 --speed 3000
1184
+ ```
1185
+
1186
+ ### `ui drag`
1187
+
1188
+ 拖拽操作。
1189
+
1190
+ **命令格式:**
1191
+
1192
+ ```bash
1193
+ devecocli ui drag <x1> <y1> <x2> <y2> --device <name|serial> --speed <n>
1194
+ ```
1195
+
1196
+ **参数:**
1197
+
1198
+ | 参数 | 说明 |
1199
+ | --- | --- |
1200
+ | `<x1> <y1> <x2> <y2>` | 必选,起点和终点坐标 |
1201
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1202
+ | --speed \<n> | 可选,滑动速度(像素/秒),范围 `200` ~ `40000` |
1203
+
1204
+ **示例:**
1205
+
1206
+ ```bash
1207
+ # 拖拽操作
1208
+ devecocli ui drag 100 500 100 200
1209
+ devecocli ui drag 100 500 100 200 --device Phone
1210
+ devecocli ui drag 100 500 100 200 --speed 1500
1211
+ ```
1212
+
1213
+ ### `ui dircfling`
1214
+
1215
+ 向指定方向快速滑动。
1216
+
1217
+ **命令格式:**
1218
+
1219
+ ```bash
1220
+ devecocli ui dircfling <direction> --device <name|serial>
1221
+ ```
1222
+
1223
+ **参数:**
1224
+
1225
+ | 参数 | 说明 |
1226
+ | --- | --- |
1227
+ | `<direction>` | 必选,方向,取值为 `up`, `down`, `left`, `right` |
1228
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1229
+
1230
+ **示例:**
1231
+
1232
+ ```bash
1233
+ devecocli ui dircfling up
1234
+ devecocli ui dircfling down --device Phone
1235
+ devecocli ui dircfling left
1236
+ devecocli ui dircfling right
1237
+ ```
1238
+
1239
+ **与 `ui swipe` 的区别:**
1240
+
1241
+ - `ui swipe` 需要指定精确的起点和终点坐标,支持自定义速度,适用于特定区域滑动。
1242
+ - `ui dircfling` 仅需指定方向,使用系统默认速度,适用于页面滚动或列表快速滑动。
1243
+
1244
+ ### `ui text`
1245
+
1246
+ 输入文本到当前焦点、指定坐标或指定节点位置。
1247
+
1248
+ **命令格式:**
1249
+
1250
+ ```bash
1251
+ devecocli ui text <text> [x] [y] --device <name|serial> --id <id> --window <windowId>
1252
+ ```
1253
+
1254
+ **参数:**
1255
+
1256
+ | 参数 | 说明 |
1257
+ | --- | --- |
1258
+ | `<text>` | 必选,待输入的文本 |
1259
+ | `[x] [y]` | 可选,目标坐标 |
1260
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1261
+ | --id \<id> | 节点 ID,自动解析为中心坐标。不可与 `[x] [y]`同时使用 |
1262
+ | --window \<windowId> | 目标窗口 ID,需与 `--id` 配合使用 |
1263
+
1264
+ **示例:**
1265
+
1266
+ ```bash
1267
+ devecocli ui text "Hello World"
1268
+ devecocli ui text "Hello World" --device Phone
1269
+ devecocli ui text "Hello World" 100 200
1270
+ devecocli ui text "Hello World" --id search_box
1271
+ devecocli ui text "Hello World" --id search_box --window main_window
1272
+ ```
1273
+
1274
+ ### `ui layout`
1275
+
1276
+ 导出设备屏幕上的 UI 节点树,输出每个节点的类型、节点 ID、坐标边界 `[left,top,right,bottom]`、文本及可交互标志(`clickable` / `longClickable` / `scrollable` / `checkable`)。
1277
+
1278
+ **命令格式:**
1279
+
1280
+ ```bash
1281
+ devecocli ui layout --device <name|serial> --id <id> --window <windowId> --all-windows --depth <n> --format <fmt> --mode <full|simplified>
1282
+ ```
1283
+
1284
+ **参数:**
1285
+
1286
+ | 参数名 | 说明 |
1287
+ | --- | --- |
1288
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1289
+ | --id \<id> | 节点 ID,筛选树中匹配节点(仅输出匹配节点,不带子节点,强制 JSON)。不可与未筛选的全树输出同时视为列表查询 |
1290
+ | --window \<windowId> | 目标窗口 ID,与 `--all-windows` 互斥 |
1291
+ | --all-windows | 包含所有窗口,与 `--window` 互斥 |
1292
+ | --depth \<n> | 树深度限制,`0`=不限制(默认),`1`=仅根,`2`=根+子节点 |
1293
+ | --format | 输出格式,`default` 或 `json`,默认 `default` |
1294
+ | --mode | 输出模式:`full`=完整原始树;`simplified`(默认)=折叠无 ID、无文本、无可交互标志的包装节点 |
1295
+
1296
+ **示例:**
1297
+
1298
+ ```bash
1299
+ devecocli ui layout
1300
+ devecocli ui layout --device Phone
1301
+ devecocli ui layout --device Phone --format json
1302
+ devecocli ui layout --mode full --depth 2
1303
+ devecocli ui layout --id submit_button
1304
+ devecocli ui layout --window 15 --format json
1305
+ ```
1306
+
1307
+ **说明:**
1308
+
1309
+ - `--mode simplified`(默认)会折叠无 `id`、无 `text`、无任何可交互标志的包装节点,使输出聚焦于有意义的可操作节点;根节点始终保留。`--depth` 在折叠后截断。
1310
+ - `--id` 用于按节点 ID 查询,返回所有匹配节点(`children` 置空),常配合 `ui click --id` / `ui text --id` 定位坐标。
1311
+ - 节点 `bounds` 为 `[left, top, right, bottom]`,`ui click --id` 等交互命令据此取中心坐标点击。
1312
+ - `--window` 的窗口 ID 可通过 `devecocli ui window list` 获取。
1313
+
1314
+ ### `ui window list`
1315
+
1316
+ 查看设备上的窗口列表,输出窗口 ID、名称、PID、所属屏幕 ID 及是否聚焦。为 `ui layout --window`、`ui click --window` 等命令提供窗口 ID。
1317
+
1318
+ **命令格式:**
1319
+
1320
+ ```bash
1321
+ devecocli ui window list --device <name|serial> --format <fmt> --all
1322
+ ```
1323
+
1324
+ **参数:**
1325
+
1326
+ | 参数名 | 说明 |
1327
+ | --- | --- |
1328
+ | --device \<name\|serial> | 目标设备,多设备时必填 |
1329
+ | --format | 输出格式,`default` 或 `json`,默认 `default` |
1330
+ | --all | 显示包含系统窗口在内的所有窗口;缺省时仅显示应用窗口(`type === 1`) |
1331
+
1332
+ **示例:**
1333
+
1334
+ ```bash
1335
+ devecocli ui window list
1336
+ devecocli ui window list --device Phone
1337
+ devecocli ui window list --format json
1338
+ devecocli ui window list --all
1339
+ ```
1340
+
1341
+ **说明:**
1342
+
1343
+ - 聚焦窗口在 `default` 格式下高亮显示。
1344
+ - 缺省时仅列出应用窗口;加 `--all` 可查看系统窗口,用于排查多窗口场景。
1345
+
1346
+ ### `run`
1347
+
1348
+ 构建应用后,将应用安装到真机设备或模拟器上,并启动执行
1349
+
1350
+ **命令格式:**
1351
+
1352
+ ```bash
1353
+ devecocli run --module <m1> [m2...] --device <device> --product <product> --build-mode <mode> --ability <ability> --uninstall --skip-build --apply <fileName> --hotreload [action] --hotreload-apply <fileName>
1354
+ ```
1355
+
1356
+ **参数:**
1357
+
1358
+ | 参数名 | 说明 |
1359
+ | ------------ |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
1360
+ | --module | 可选,模块名称,支持多个以空格分隔。如需指定模块的 `target` 信息,使用 `module@target` 形式。当工程中只有一个可运行模块( `entry` / `feature` / `shared` )时,可缺省 |
1361
+ | --device | 设备名称或设备序列号,单设备时可选,多设备时必选 |
1362
+ | --product | 可选,产品的名称,默认为 `default` |
1363
+ | --build-mode | 可选,构建模式名称,默认为 `debug` |
1364
+ | --ability | 可选,待启动的 `Ability` ,默认:模块 `module.json5` 中的`mainElement` |
1365
+ | --uninstall | 可选,安装前先卸载已有应用 |
1366
+ | --skip-build | 可选,跳过构建操作,直接安装应用 。\*\*说明:\*\*使用该参数时,需确保对应模块已有构建产物 |
1367
+ | --apply \<fileName\> | 可选,快速增量部署。仅重编改动文件并安装,比全量 `run` 快。`<fileName>` 为 `.hvigor/` 下的改动文件清单(每行一个相对工程根路径)。前提:DevEco Studio ≥6.1.1,且先跑过一次 `devecocli run` |
1368
+ | --hotreload [action] | 可选,使用热重载功能。使用热重载时,该命令需持续存活,以使热重载构建可以快速响应。当不需要时,执行 `devecocli run --hotreload stop` 去停止进程,释放资源 |
1369
+ | --hotreload-apply \<fileName\> | 可选,热重载(不重启应用即生效)。读取 `.hvigor/<fileName>` 改动清单,经编译安装使改动生效。前提:后台 `--hotreload` 进程在跑。范围:仅单个模块(`--module` 必填),且只支持 `.ets` 文件 |
1370
+
1371
+ **示例:**
1372
+
1373
+ ```bash
1374
+ devecocli run
1375
+ devecocli run --module entry --device 127.0.0.1:5555
1376
+ devecocli run --module library@phone --device 127.0.0.1:5555
1377
+ devecocli run --module entry service uiextension --device 127.0.0.1:5555
1378
+ devecocli run --product oversea --module entry --ability EntryAbility
1379
+ devecocli run --build-mode release
1380
+ devecocli run --uninstall
1381
+ devecocli run --apply changes.txt
1382
+ devecocli run --module entry --hotreload
1383
+ devecocli run --hotreload stop
1384
+ devecocli run --module entry --hotreload-apply changes.txt
1385
+ ```
1386
+
1387
+ **说明:**
1388
+
1389
+ - 应用启动成功后(含 `--apply` 增量部署重启后),默认自动执行**冒烟检查**:确认应用进程仍存活,并对屏幕截图做纯色空白检测(pHash)。通过时输出 `Smoke: PASS`;进程已退出时输出 `Smoke: FAIL_CRASH`(附带 `crash_log:` 崩溃日志路径),检测到空白屏时输出 `Smoke: FAIL_BLANK`(附带 `screenshot:` 截图路径),检查失败时命令以非零码退出。证据仅在失败时落盘于工程 `.hvigor/smoke/` 下的本次运行独立目录:失败的截图与崩溃日志自检查结束起**保留 24 小时**(期间任何后续 run 都不会删除),之后由下一次 run 自动清理;`PASS` 的截图在判定后连同目录一并删除。进行中的并发检查互不影响,`.hvigor/` 不会随 run 次数堆积。
1390
+ - 无可启动的 `Ability`,或使用 `--hotreload` / `--hotreload-apply` 时,跳过冒烟检查。
1391
+ - 冒烟检查取证前默认等待 `3000` 毫秒(供应用完成冷启动),可通过环境变量 `DEVECO_CLI_SMOKE_WAIT_MS`(毫秒)调整:设为 `0` 立即取证;冷启动较慢的设备可适当调大以避免误报。
1392
+
1393
+ ### `log`
1394
+
1395
+ 查看`hilog`普通日志或崩溃日志
1396
+
1397
+ **命令格式:**
1398
+
1399
+ ```bash
1400
+ devecocli log --device <device> --crash --level <level> --bundle-name <bundle-name> --keyword <keyword> --tail <num> --from <start> --to <end> --follow
1401
+ ```
1402
+
1403
+ **参数:**
1404
+
1405
+ | 参数名 | 说明 |
1406
+ | ------------- | -------------------------------------------------------------------------------------------------------------------------- |
1407
+ | --device | 设备名称或设备序列号,单设备时可选,多设备时必选 |
1408
+ | --crash | 可选,查看崩溃日志 |
1409
+ | --level | 可选,日志级别,取值包括`D`( `Debug` )、`I`( `Info` )、`W`( `Warn` )、`E`( `Error` )、`F`( `Fatal` ) |
1410
+ | --bundle-name | 可选,根据包名查看日志 |
1411
+ | --keyword | 可选,根据关键词查看日志,关键词区分大小写 |
1412
+ | --tail | 可选,显示最新的N行日志,取值为正整数 |
1413
+ | --from | 可选,起始时间,单位为`m`和`s`,`m`和`s`为小写,默认为`s`,`start`的取值需要大于等于`end` |
1414
+ | --to | 可选,结束时间,单位为`m`和`s`,`m`和`s`为小写,默认为`s` 。不可与--follow同时使用。**说明:** 如当前时间为05:00,`start`设置为30s,`end`设置为10s,则起始时间为04:30,结束时间为04:50 |
1415
+ | --follow | 可选,实时输出日志。不可与--to同时使用 |
1416
+
1417
+ **示例:**
1418
+
1419
+ ```bash
1420
+ devecocli log --level E
1421
+ devecocli log --crash --bundle-name com.example.app
1422
+ devecocli log --device 127.0.0.1:5555 --level W --keyword Init
1423
+ devecocli log --tail 100 --from 5m --to 2m
1424
+ devecocli log --follow --bundle-name com.example.app
1425
+ ```
1426
+
1427
+ ### `skills list`
1428
+
1429
+ 查询可用的 `Skill`
1430
+
1431
+ **命令格式:**
1432
+
1433
+ ```bash
1434
+ devecocli skills list --long
1435
+ ```
1436
+
1437
+ **参数:**
1438
+
1439
+ | 参数名 | 说明 |
1440
+ | --------- | ----------------------------------------------- |
1441
+ | -l,--long | 可选,`Skill` 详情,包括描述和已安装的智能体列表。缺省时,仅显示 `Skill` 名称 |
1442
+
1443
+ **示例:**
1444
+
1445
+ ```bash
1446
+ devecocli skills list
1447
+ devecocli skills list --long
1448
+ devecocli skills list -l
1449
+ ```
1450
+
1451
+ ### `skills find`
1452
+
1453
+ 按关键词搜索 `Skill`
1454
+
1455
+ **命令格式:**
1456
+
1457
+ ```bash
1458
+ devecocli skills find <keyword>
1459
+ ```
1460
+
1461
+ **参数:**
1462
+
1463
+ | 参数名 | 说明 |
1464
+ | ------- | -------- |
1465
+ | keyword | 必选,搜索关键词 |
1466
+
1467
+ **示例:**
1468
+
1469
+ ```bash
1470
+ devecocli skills find deveco
1471
+ ```
1472
+
1473
+ ### `skills add`
1474
+
1475
+ 将 `Skill` 添加到智能体中
1476
+
1477
+ **命令格式:**
1478
+
1479
+ ```bash
1480
+ devecocli skills add --all --agent <agents> --skill <skill-name> --project <path> --path <path> --force
1481
+ ```
1482
+
1483
+ **参数:**
1484
+
1485
+ | 参数名 | 说明 |
1486
+ | ---------- | --------------------------------------------------------- |
1487
+ | --all | 可选,添加所有可用的 `Skill` ,与 `--skill` 二选一 |
1488
+ | --agent | 可选,智能体名称,多个智能体时以英文逗号分隔。缺省时,添加到已检测到的智能体中 |
1489
+ | --skill | 可选,待添加的 `Skill` 名称,与 `--all` 二选一 |
1490
+ | --project | 可选,指定项目路径,将 `Skill` 添加到该工程项目中 |
1491
+ | --path | 可选,指定路径,将 `Skill` 添加到该路径,不可与 `--project` 或 `--agent` 同时使用 |
1492
+ | -f,--force | 可选,当目标位置已有同名 `Skill` 时,覆盖重添加 |
1493
+
1494
+ **示例:**
1495
+
1496
+ ```bash
1497
+ devecocli skills add --all
1498
+ devecocli skills add --skill skillname --agent agentname --force # skillname需替换成实际的Skill名称
1499
+ devecocli skills add --skill skillname --project ./my-app # skillname需替换成实际的Skill名称
1500
+ ```
1501
+
1502
+ ### `skills remove`
1503
+
1504
+ 从智能体中删除已添加的 `Skill`
1505
+
1506
+ **命令格式:**
1507
+
1508
+ ```bash
1509
+ devecocli skills remove --skill <skill-name> --agent <agents> --project <path> --path <path>
1510
+ ```
1511
+
1512
+ **参数:**
1513
+
1514
+ | 参数名 | 说明 |
1515
+ | --------- | -------------------------------------------------------- |
1516
+ | --skill | 必选,待删除的 `Skill` 名称 |
1517
+ | --agent | 可选,智能体名称,多个智能体时以英文逗号分隔。缺省时,删除到已检测到的智能体中的 `Skill` |
1518
+ | --project | 可选,指定项目路径,删除该项目中的 `Skill` |
1519
+ | --path | 可选,指定路径,删除该项目中的 `Skill`,不可与 `--project` 或 `--agent` 同时使用 |
1520
+
1521
+ **示例:**
1522
+
1523
+ ```bash
1524
+ devecocli skills remove --skill skillname # skillname需替换成实际的Skill名称
1525
+ devecocli skills remove --skill skillname --agent agentname # skillname需替换成实际的Skill名称
1526
+ ```
1527
+
1528
+ ### `serve mcp`
1529
+
1530
+ 启动本地 `MCP` 服务。智能体配置 `MCP` 服务后,可通过 `MCP` 协议调用下方列出的代码分析与语言特性工具。不同智能体平台配置 `MCP` 服务的界面不一样,一个智能体平台的配置示例如下。
1531
+ 推荐通过 `devecocli init --mcp` 自动配置
1532
+
1533
+ ```bash
1534
+ {
1535
+ "mcp": {
1536
+ "deveco-mcp": {
1537
+ "type": "local",
1538
+ "command": [
1539
+ "devecocli",
1540
+ "serve",
1541
+ "mcp"
1542
+ ],
1543
+ "environment":{
1544
+ "PROJECT_PATH": "D:\\code\\sample_project", // 工程路径
1545
+ "NODE_MAX_OLD_SPACE_SIZE": "8192", // 可选,设置内部node进程最大的老生代内存大小,默认为8192
1546
+ "DEVECO_PATH": "D:\\Application\\DevEco Studio", // 可选,Deveco Studio的路径
1547
+ "DEVECO_CLI_CPP_ENABLED": "true", // 可选,是否启用C++ LSP服务,默认为true,设为false可关闭
1548
+ "DEVECO_CLI_CPP_COMPILE_COMMANDS": "D:\\code\\sample_project\\compile_commands.json" // 可选,自定义compile_commands.json路径,指定后跳过compileNative同步,直接复用该编译数据库
1549
+ },
1550
+ "enbale": true
1551
+ }
1552
+ }
1553
+ }
1554
+ ```
1555
+
1556
+ #### MCP 工具
1557
+
1558
+ `deveco-mcp` 服务遵循 [MCP](https://modelcontextprotocol.io) 规范,通过 `tools/list` 暴露工具、由模型经 `tools/call` 调用。每个工具由**名称**、**描述**和 **JSON Schema 入参**定义;返回值为 `content` 文本数组,`isError: true` 表示执行错误。
1559
+
1560
+ **工具总览:**
1561
+
1562
+ | 工具名 | 用途 | 支持语言 |
1563
+ | --- | --- | --- |
1564
+ | `check` | 静态语法分析,返回结构化诊断信息 | ArkTS、C/C++ |
1565
+ | `hover` | 获取指定位置的悬浮信息(类型、文档) | ArkTS、C/C++ |
1566
+ | `definition` | 查找符号定义位置 | ArkTS、C/C++ |
1567
+ | `declaration` | 查找符号声明位置(ArkTS 中可能与定义不同) | ArkTS、C/C++ |
1568
+ | `references` | 查找符号在全工程中的所有引用 | ArkTS、C/C++ |
1569
+ | `implementation` | 查找符号的实现(如接口实现) | ArkTS、C/C++ |
1570
+ | `workspaceSymbol` | 按名称在全工程搜索符号 | ArkTS、C/C++ |
1571
+ | `documentSymbol` | 获取单文件的符号树(函数、类、变量及范围) | ArkTS、C/C++ |
1572
+ | `callHierarchy` | 查询函数调用关系(incoming=调用方,outgoing=被调用方) | ArkTS 双向、C/C++ 仅 incoming |
1573
+ | `restart` | 原地重启(重置状态 + 重新 sync/init),不杀进程、客户端不断开;ERROR 态可用 | ArkTS、C/C++(可按 target 单选) |
1574
+
1575
+ **可用性说明:**
1576
+
1577
+ - `check` 始终注册;`restart` 仅在 ArkTS LSP 使用 stdio 模式时注册,socket 模式共享 ace-server 生命周期,不提供 `restart`。MCP 对外仍使用 stdio。其余 8 个语言特性工具仅在检测到标准 LSP 服务入口(`standardIndex/index.js`)时注册,老版本将不暴露这些工具。
1578
+ - 所有语言特性工具需项目进入 `READY` 状态(`ohpm install` + `hvigor sync` + LSP 初始化完成)后才可用;未就绪时返回 `please retry in N seconds`,模型可稍后重试。`restart` 例外:它正是用于把 server 从 `ERROR` 态拉回,调用后返回"约 10 秒后重试",后台异步重置并重新 sync/init。
1579
+ - C/C++ 工具需要工程包含 C++ 模块;无 C++ 代码时返回 `No C++ code`。
1580
+ - 支持的文件扩展名:ArkTS 为 `.ets`;C/C++ 为 `.c` `.cc` `.cpp` `.cxx` `.c++` `.h` `.hh` `.hpp` `.hxx` `.h++` `.ipp` `.ixx` `.inl` `.inc` `.tpp`。
1581
+ - 不属于当前工程的路径会被拒绝。
1582
+
1583
+ **入参定义:**
1584
+
1585
+ ##### `check`
1586
+
1587
+ 对传入的源文件进行静态语法分析并返回诊断信息,支持 ArkTS 与 C/C++ 在同一次调用中混合传入。
1588
+
1589
+ | 参数 | 类型 | 必选 | 说明 |
1590
+ | --- | --- | --- | --- |
1591
+ | `files` | string[] | 是 | 待检查的源文件路径列表,相对工程根目录,至少 1 个 |
1592
+
1593
+ ##### `hover` / `definition` / `declaration` / `references` / `implementation`
1594
+
1595
+ 位置类语言特性,共享同一入参结构。返回该位置符号的类型/文档信息、定义/声明位置、引用列表或实现列表。
1596
+
1597
+ | 参数 | 类型 | 必选 | 说明 |
1598
+ | --- | --- | --- | --- |
1599
+ | `file` | string | 是 | 源文件路径,相对工程根目录,支持 `.ets` 与 C/C++ 扩展名 |
1600
+ | `line` | number | 是 | 行号,0-based |
1601
+ | `character` | number | 是 | 列号(字符偏移),0-based |
1602
+
1603
+ ##### `workspaceSymbol`
1604
+
1605
+ 按名称在全工程搜索符号,无需打开具体文件。
1606
+
1607
+ | 参数 | 类型 | 必选 | 说明 |
1608
+ | --- | --- | --- | --- |
1609
+ | `query` | string | 是 | 符号名称或片段,非空 |
1610
+
1611
+ ##### `documentSymbol`
1612
+
1613
+ 获取单个文件的符号树,适合文件概览、结构化拆解和大文件切片。
1614
+
1615
+ | 参数 | 类型 | 必选 | 说明 |
1616
+ | --- | --- | --- | --- |
1617
+ | `file` | string | 是 | 源文件路径,相对工程根目录,支持 `.ets` 与 C/C++ 扩展名 |
1618
+
1619
+ ##### `callHierarchy`
1620
+
1621
+ 查询某位置函数的调用关系。
1622
+
1623
+ | 参数 | 类型 | 必选 | 说明 |
1624
+ | --- | --- | --- | --- |
1625
+ | `file` | string | 是 | 源文件路径,相对工程根目录,支持 `.ets` 与 C/C++ 扩展名 |
1626
+ | `line` | number | 是 | 行号,0-based |
1627
+ | `character` | number | 是 | 列号(字符偏移),0-based |
1628
+ | `direction` | enum | 是 | `incoming`=谁调用了该函数;`outgoing`=该函数调用了谁。ArkTS 支持双向,C/C++(clangd)仅 `incoming` |
1629
+
1630
+ ##### `restart`
1631
+
1632
+ 原地重启 MCP server:重置双侧状态并重新 sync/init(ohpm install + hvigor sync + compileNative + LSP 握手),不杀进程、客户端连接保持。用于 sync/init 失败导致 server 停在 `ERROR` 态时(免去退出并重开 agent)。fire-and-forget:立即返回"约 10 秒后重试",重置在后台异步进行。**注意:`restart` 仅在修复根因后用于恢复,不能修复错误的工程配置。若重启后再次失败,说明是持久性配置问题(oh-package.json5/build-profile.json5 无效、ohpm install 或 hvigor sync 失败、SDK 版本不符等),不要循环调用 `restart`,应请用户排查并修复工程后再重试。**
1633
+
1634
+ | 参数 | 类型 | 必选 | 说明 |
1635
+ | --- | --- | --- | --- |
1636
+ | `target` | enum | 否 | 重启哪一侧:`arkts`(ArkTS ace-server)、`cpp`(C++ clangd)、`all`(双侧,默认)。省略等同 `all` |
1637
+
1638
+ ### `serve lsp`
1639
+
1640
+ 启动本地 `LSP` 语言服务。智能体配置 `LSP` 服务后,可通过 `LSP` 协议获取代码补全、跳转定义、悬浮提示、引用查找、诊断等语言特性。当前支持 `ArkTS`和 `clangd`。
1641
+
1642
+ ```bash
1643
+ {
1644
+ "lsp": {
1645
+ "ArkTS": {
1646
+ "command": [
1647
+ "devecocli",
1648
+ "serve",
1649
+ "lsp",
1650
+ "--arkts"
1651
+ ],
1652
+ "extensions": [
1653
+ ".ets"
1654
+ ]
1655
+ },
1656
+ "clangd": {
1657
+ "command": [
1658
+ "devecocli",
1659
+ "serve",
1660
+ "lsp",
1661
+ "--cpp"
1662
+ ],
1663
+ "extensions": [
1664
+ ".c",
1665
+ ".cpp",
1666
+ ".cc",
1667
+ ".cxx",
1668
+ ".h",
1669
+ ".hpp",
1670
+ ".hxx",
1671
+ ".hh"
1672
+ ]
1673
+ }
1674
+ }
1675
+ }
1676
+ ```
1677
+
1678
+ **参数:**
1679
+
1680
+ | 参数名 | 说明 |
1681
+ | --- | --- |
1682
+ | `--arkts` | 与 `--cpp` 二选一,启动 ArkTS 语言服务(ace-server) |
1683
+ | `--cpp` | 与 `--arkts` 二选一,启动 C/C++ 语言服务(clangd) |
1684
+ | `--project-path <path>` | 可选,工程根路径,默认为当前工作目录 |
1685
+ | `--auto-detect` | 可选,当前目录向下查找工程根(检查当前目录自身及其子目录,最多 3 层子目录);适用于 `--arkts` 和 `--cpp`;指定了 `--project-path` 则忽略 |
1686
+
1687
+ > `serve lsp` 是常驻 stdio 服务,**不能直接在终端运行**。请查阅所用智能体自身文档中"配置自定义 LSP 服务"的方式,将上述命令填入其配置。
1688
+ >
1689
+ > **注意:不要把 `serve lsp` 与 `devecocli serve mcp` 同时接入同一个智能体。** 两者会各自拉起一份 ace-server/clangd 实例,内存翻倍。请在直连 LSP 与 MCP 中二选一,**推荐 MCP**——接入更简单,且自带初始化。
1690
+ >
1691
+ > 智能体不支持自定义 LSP(仅支持 MCP)时,可搭配 [agent-lsp](https://github.com/blackwell-systems/agent-lsp)(把任意 stdio LSP 封装为 MCP server)使用,例如 MCP command:`["agent-lsp", "ets:devecocli,serve,lsp,--arkts"]`。
1692
+
1693
+ ### `signature generate`
1694
+
1695
+ 自动生成调试签名材料(包括p12密钥库、csr证书请求文件、p7b配置文件、cer证书文件),并将签名配置写入项目的 `build-profile.json5` 中。
1696
+
1697
+ **命令格式:**
1698
+
1699
+ ```bash
1700
+ devecocli signature generate --product <product> --team-id <team-id> --force --help
1701
+ ```
1702
+
1703
+ **参数:**
1704
+
1705
+ | 参数名 | 说明 |
1706
+ |-----------------------|-----------------------------------------|
1707
+ | --product \<product\> | 可选,指定product生成签名,默认为 `default` |
1708
+ | --team-id \<team-id\> | 可选,指定生效的team-id,默认使用自身作为团队信息 |
1709
+ | --force | 可选,强制覆盖已存在的证书文件 |
1710
+ | --help,--h | 可选,查看帮助信息 |
1711
+
1712
+ **示例:**
1713
+
1714
+ ```bash
1715
+ # 自动生成签名并写入工程配置
1716
+ devecocli signature generate
1717
+
1718
+ # 指定product
1719
+ devecocli signature generate --product default
1720
+
1721
+ # 指定team-id
1722
+ devecocli signature generate --team-id 1222
1723
+
1724
+ # 强制覆盖已存在的证书文件
1725
+ devecocli signature generate --force
1726
+
1727
+ # 查询帮助信息
1728
+ devecocli signature generate --help
1729
+ ```
1730
+
1731
+ ## 常见问题
1732
+
1733
+ [FAQ](https://gitcode.com/openharmony-sig/deveco-cli/wiki/FAQ.md)
1734
+
1735
+ ## 开发
1736
+
1737
+ ```bash
1738
+ npm install
1739
+ npm run dev
1740
+ npm start -- <command>
1741
+ npm run lint
1742
+ npm run format
1743
+ npm run build
1744
+ ```
1745
+
1746
+ - 架构与目录说明见 [`AGENTS.md`](./AGENTS.md)
1747
+ - 如需参与维护,建议先阅读 `AGENTS.md` 中的约定与架构说明
1748
+
1749
+ ## 许可证
1750
+
1751
+ [MIT](./LICENSE)