Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

deveco-cli

DevEco Studio 工具链的 Python CLI 封装。提供 8 条命令,覆盖鸿蒙应用开发从构建、UI 操控到模拟器管理的完整流程。所有输出均为 JSON(stdout),进度信息输出到 stderr,天然适合脚本自动化与 AI Agent 驱动场景。

仅支持 macOS,DevEco Studio 须已安装于本机。安装路径与鸿蒙工程路径均不得含空格。


Quick Start

# 1. 安装
uv pip install -e .   # 或 pip install -e .

# 2. 验证
deveco --help

# 3. 第一条命令:构建工程
deveco build --project /path/to/my-harmony-app

命令总览

命令 功能 典型用法
build 构建 HAP / HSP / HAR deveco build -p <工程路径>
sync 同步工程依赖(ohpm + hvigorw) deveco sync -p <工程路径>
check ArkTS 静态语法检查(LSP 级别) deveco check -p <工程路径> Index.ets
start 安装并启动应用到设备 deveco start -p <工程路径>
ui-tree 获取当前界面 UI 组件树 deveco ui-tree -p <工程路径> --mode simple -o ./out
ui-action UI 操作:点击 / 输入 / 滑动 / 按键 / 截图 deveco ui-action -p <工程路径> --type click --x 360 --y 640
knowledge 搜索 HarmonyOS 开发文档 deveco knowledge ArkTS Text 组件
emulator 模拟器管理(list / start / stop) deveco emulator start --name "Pura 80 Ultra"

命令详解

build — 构建 HAP / HSP / HAR

自动推断构建任务(assembleApp / assembleHap / assembleHsp / assembleHar),依次执行 ohpm install 和 hvigorw。

Synopsis

deveco build -p <工程路径> [-m <模块>] [--product <产品>] [-i <意图>] [--log-path <日志>]

参数

参数 短写 必填 默认值 说明
--project -p 是 — 鸿蒙工程根目录
--module -m 否 — 模块名(如 entry@default),不传则构建整个 APP
--product 否 default Product 名称
--intent -i 否 LogVerification 构建意图,见下表
--log-path 否 — 构建日志保存路径
--intent 值 buildMode debuggable debugLine
LogVerification(默认) debug true false
UIDebug debug true true
PerformanceProfile debug true —
Release release false —

Example

# 构建整个 APP
deveco build -p ~/projects/MyApp

# 仅构建 entry 模块,Release 模式
deveco build -p ~/projects/MyApp -m entry@default -i Release
{
  "status": "ok",
  "command": "build",
  "task": "assembleHap",
  "intent": "LogVerification",
  "hap_files": ["/path/to/entry-default-signed.hap"],
  "message": "构建成功,找到 1 个 HAP 文件"
}

sync — 同步工程依赖

执行 ohpm install(可跳过)和 hvigorw --sync,用于初始化依赖或更新 Gradle 配置。

Synopsis

deveco sync -p <工程路径> [--product <产品>] [--skip-ohpm] [--log-path <日志>]

参数

参数 短写 必填 默认值 说明
--project -p 是 — 鸿蒙工程根目录
--product 否 default Product 名称
--skip-ohpm 否 false 跳过 ohpm install 步骤
--log-path 否 — 日志保存路径

Example

deveco sync -p ~/projects/MyApp

# 已运行过 ohpm,仅重新 sync hvigorw
deveco sync -p ~/projects/MyApp --skip-ohpm
{
  "status": "ok",
  "command": "sync",
  "message": "项目同步成功"
}

check — ArkTS 静态语法检查

启动 DevEco Studio 内置的 ace-server LSP 服务,对指定 .ets 文件进行静态分析,返回与 IDE 一致的诊断结果。首次运行会在工程根目录自动生成 deveco-cli.toml 配置文件。

Synopsis

deveco check -p <工程路径> <file.ets> [<file2.ets> ...]

参数

参数 短写 必填 默认值 说明
--project -p 是 — 鸿蒙工程根目录
<files> 是 — 一个或多个 .ets 文件路径(位置参数)

Example

deveco check -p ~/projects/MyApp src/main/ets/pages/Index.ets

# 同时检查多个文件
deveco check -p ~/projects/MyApp src/main/ets/pages/Index.ets src/main/ets/components/Button.ets
{
  "status": "ok",
  "command": "check",
  "files_checked": 1,
  "total_issues": 2,
  "diagnostics": {
    "/abs/path/to/Index.ets": [
      {
        "range": {"start": {"line": 10, "character": 4}, "end": {"line": 10, "character": 12}},
        "severity": 1,
        "code": "ts(2322)",
        "message": "Type 'string' is not assignable to type 'number'."
      }
    ]
  },
  "message": "检查完成,2 个问题"
}

severity:1 Error · 2 Warning · 3 Information · 4 Hint


start — 安装并启动应用

将 HAP 安装到已连接的设备或模拟器,强制停止同名进程后启动指定 Ability。未指定 --device 时自动发现已连接设备。

Synopsis

deveco start -p <工程路径> [-m <模块>] [-t <构建目标>] [-d <设备>] [-a <Ability>]

参数

参数 短写 必填 默认值 说明
--project -p 是 — 鸿蒙工程根目录
--module -m 否 entry 模块名
--target -t 否 default 构建目标
--device -d 否 自动发现 设备名或 ID(来自 hdc list targets)
--ability -a 否 EntryAbility Ability 名称

Example

deveco start -p ~/projects/MyApp

# 指定设备和 Ability
deveco start -p ~/projects/MyApp -d emulator-5554 -a MainAbility
{
  "status": "ok",
  "command": "start",
  "bundle_name": "com.example.myapp",
  "ability": "EntryAbility",
  "hap": "/path/to/entry-default-signed.hap",
  "message": "应用已启动"
}

ui-tree — 获取 UI 组件树

Dump 当前界面的 UI 组件树并保存到本地目录。full 模式通过 uitest dumpLayout 输出完整 JSON;simple 模式通过 hidumper 输出关键节点文本。

Synopsis

deveco ui-tree -p <工程路径> --mode simple|full -o <输出目录> [-d <设备>]

参数

参数 短写 必填 默认值 说明
--project -p 是 — 鸿蒙工程根目录
--mode 是 — simple(关键节点文本)或 full(完整 JSON)
--output-dir -o 是 — 输出目录(文件名自动带时间戳)
--device -d 否 自动发现 设备名或 ID

Example

deveco ui-tree -p ~/projects/MyApp --mode simple -o ./ui-snapshots

deveco ui-tree -p ~/projects/MyApp --mode full -o ./ui-snapshots -d 127.0.0.1:5555
{
  "status": "ok",
  "command": "ui-tree",
  "mode": "simple",
  "file": "/abs/path/to/ui-snapshots/ui_tree_simple_1718000000.txt",
  "content": "...",
  "message": "UI 树已保存"
}

ui-action — UI 操作

在已连接设备上执行 UI 操作,通过 hdc shell uitest uiInput 驱动。支持 5 种操作类型,各类型所需参数不同。

Synopsis

deveco ui-action -p <工程路径> --type <类型> [类型专属参数...] [-d <设备>]

通用参数

参数 短写 必填 默认值 说明
--project -p 是 — 鸿蒙工程根目录
--type 是 — 操作类型,见下表
--device -d 否 自动发现 设备名或 ID

各类型专属参数

--type 专属参数 说明
click --x(必填)--y(必填) 点击坐标
inputText --x(必填)--y(必填)--text(必填) 先清空再输入(click → 全选 → 删除 → 输入)
directionalFling --direction(0左/1右/2上/3下,默认0)--velocity(默认600)--step-length(默认200) 方向滑动
keyEvent --key1(必填)--key2(可选)--key3(可选) 按键或组合键
screenshot --save-path(设备路径,可选)--local-path(本地路径,可选)--display-id(多屏,可选) 截图并拉取到本地

Example

# 点击
deveco ui-action -p ~/projects/MyApp --type click --x 360 --y 640

# 在输入框输入文字
deveco ui-action -p ~/projects/MyApp --type inputText --x 200 --y 300 --text "Hello World"

# 向上滑动
deveco ui-action -p ~/projects/MyApp --type directionalFling --direction 2 --velocity 800

# 按下返回键
deveco ui-action -p ~/projects/MyApp --type keyEvent --key1 Back

# 截图保存到本地
deveco ui-action -p ~/projects/MyApp --type screenshot --local-path ./screenshot.png
{
  "status": "ok",
  "command": "ui-action",
  "action": "click",
  "message": "操作成功"
}

knowledge — 搜索 HarmonyOS 开发文档

根据关键词搜索鸿蒙开发知识库,返回相关文档片段,用于辅助代码生成。

Synopsis

deveco knowledge <关键词> [<关键词2> ...] [--max-chars <字符数>]

参数

参数 必填 默认值 说明
<keywords> 是 — 一个或多个关键词(位置参数)
--max-chars 否 5000 最大返回字符数

Example

deveco knowledge ArkTS Text 组件

deveco knowledge 页面路由 router --max-chars 3000
{
  "status": "ok",
  "command": "knowledge",
  "keywords": ["ArkTS", "Text", "组件"],
  "data": { ... }
}

emulator — 模拟器管理

提供 list / start / stop 三个子命令,封装 /Applications/DevEco-Studio.app/Contents/tools/emulator/Emulator。start 会后台拉起 Emulator 进程,然后轮询 hdc list targets 直到设备出现。

Synopsis

deveco emulator list
deveco emulator start --name "<实例名>" [--wait-hdc <秒数>]
deveco emulator stop  --name "<实例名>"

参数(start)

参数 短写 必填 默认值 说明
--name -n 是 — 模拟器实例名(deveco emulator list 可查)
--wait-hdc 否 90 等待 hdc 发现设备的最大秒数,超时返回 emulator_boot_timeout

Example

deveco emulator list

deveco emulator start --name "Pura 80 Ultra" --wait-hdc 180

deveco emulator stop --name "Pura 80 Ultra"
{
  "status": "ok",
  "command": "emulator-start",
  "name": "Pura 80 Ultra",
  "pid": 67615,
  "connected_devices": ["127.0.0.1:5555"],
  "message": "模拟器已启动: 127.0.0.1:5555"
}

若 hdc 已有设备,start 会直接返回 already_running: true 而不再启动新实例。

error_type 扩展:deveco_not_found / emulator_not_found / emulator_exited / emulator_boot_timeout / popen_failed / list_failed / stop_failed。


输出协议

所有命令均遵循同一套 JSON 协议:

  • stdout:唯一的机器可读输出,始终为合法 JSON
  • stderr:进度信息(格式 [deveco] ...),供人类阅读,不要解析
  • 退出码:0 成功,1 失败

成功响应通用字段

{ "status": "ok", "command": "<命令名>", ... }

失败响应通用字段

{
  "status": "error",
  "command": "<命令名>",
  "error_type": "<分类>",
  "message": "<描述>",
  "detail": "<可选:原始日志,截断至 2000 字符>",
  "suggestion": "<可选:修复建议>"
}

常见 error_type:

值 含义
config_error DevEco 未找到或工程路径不存在
ohpm_failed ohpm install 失败
build_failed hvigorw 构建失败
sync_failed hvigorw sync 失败
lsp_init_timeout ace-server 启动超时
no_device 未找到已连接设备
hap_not_found 未找到 HAP 构建产物
install_failed hdc install 失败
action_failed UI 操作执行失败
connection_error 知识库 API 不可达

环境变量

变量 默认值 说明
DEVECO_PATH /Applications/DevEco-Studio.app DevEco Studio 安装路径
ADK_KNOWLEDGE_API 内置地址 knowledge 命令使用的搜索 API endpoint

AI Agent 集成指南

deveco-cli 的设计目标之一是作为 Agent 的工具调用层:

解析输出的推荐模式

import subprocess, json

result = subprocess.run(
    ["deveco", "build", "--project", project_path],
    capture_output=True, text=True
)
# stdout 是 JSON,stderr 是进度日志(不解析)
data = json.loads(result.stdout)
if data["status"] == "error":
    # 利用 error_type 决策下一步
    handle_error(data["error_type"], data.get("suggestion"))

典型 Agent 工作流

check(静态检查)
  → 有 Error?修复代码后重试
  → 通过 → build(构建)
              → 失败?根据 detail 排查
              → 成功 → start(安装启动)
                          → ui-tree(获取界面结构)
                            → ui-action(执行操作)
                              → ui-tree(验证结果)
                                → 循环...

注意事项

  • check 首次运行较慢(ace-server 需要索引工程,最长等待约 5 分钟),后续快
  • build 超时 600 秒,sync 超时 300 秒,请勿过早中断
  • 多设备环境下建议始终传 --device,避免自动选择到非预期设备

License

MIT

About

DevEco Studio 工具链的 Python CLI 封装,提供 build / sync / check / start / ui-tree / ui-action / knowledge 共 7 条命令,所有输出均为结构化 JSON,可作为 deveco-mcp 的轻量替代,用于鸿蒙应用开发自动化与 Agent 驱动场景。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages