支持鸿蒙OSNEXT_HDC
This commit is contained in:
@@ -1,337 +0,0 @@
|
||||
# HDC 实现总结
|
||||
|
||||
本文档总结了为 Open-AutoGLM 项目添加鸿蒙系统 HDC 支持的所有修改。
|
||||
|
||||
## 更新日期
|
||||
2025-12-16
|
||||
|
||||
## 最新更新
|
||||
|
||||
### v1.2.0 - 鸿蒙应用列表支持
|
||||
|
||||
- ✅ 创建独立的鸿蒙应用配置文件 `apps_harmonyos.py`
|
||||
- ✅ 内置 80+ 常用鸿蒙应用的 Bundle Name 映射
|
||||
- ✅ 支持列出鸿蒙应用:`python main.py --device-type hdc --list-apps`
|
||||
- ✅ 应用启动失败时提示可用应用列表
|
||||
- ✅ 更新文档添加应用列表说明和查找方法
|
||||
|
||||
## 主要改进
|
||||
|
||||
### 1. 使用正确的 HDC 命令格式
|
||||
|
||||
根据鸿蒙系统的实际命令格式,更新了所有 UI 交互命令:
|
||||
|
||||
#### 点击操作
|
||||
- **旧格式**: `hdc shell input tap X Y`
|
||||
- **新格式**: `hdc shell uitest uiInput click X Y` ✅
|
||||
|
||||
#### 双击操作
|
||||
- **旧格式**: 两次 `hdc shell input tap X Y`
|
||||
- **新格式**: `hdc shell uitest uiInput doubleClick X Y` ✅
|
||||
|
||||
#### 长按操作
|
||||
- **旧格式**: `hdc shell input swipe X Y X Y DURATION`
|
||||
- **新格式**: `hdc shell uitest uiInput longClick X Y` ✅
|
||||
|
||||
#### 滑动操作
|
||||
- **旧格式**: `hdc shell input swipe X1 Y1 X2 Y2 DURATION`
|
||||
- **新格式**: `hdc shell uitest uiInput swipe X1 Y1 X2 Y2 DURATION` ✅
|
||||
|
||||
#### 返回键
|
||||
- **旧格式**: `hdc shell input keyevent 2`
|
||||
- **新格式**: `hdc shell uitest uiInput keyEvent Back` ✅
|
||||
|
||||
#### Home键
|
||||
- **旧格式**: `hdc shell input keyevent 1`
|
||||
- **新格式**: `hdc shell uitest uiInput keyEvent Home` ✅
|
||||
|
||||
### 2. 截屏命令兼容性
|
||||
|
||||
支持新旧两种鸿蒙版本的截屏命令(**注意:鸿蒙 HDC 只支持 JPEG 格式**):
|
||||
|
||||
```bash
|
||||
# 新版本(优先尝试)
|
||||
hdc shell screenshot /data/local/tmp/tmp_screenshot.jpeg
|
||||
|
||||
# 旧版本(兜底方案)
|
||||
hdc shell snapshot_display -f /data/local/tmp/tmp_screenshot.jpeg
|
||||
```
|
||||
|
||||
**格式转换说明:**
|
||||
- 设备上保存为 JPEG 格式(HDC 限制)
|
||||
- 拉取到本地后自动转换为 PNG 格式
|
||||
- 模型推理使用 PNG 格式的 base64 编码
|
||||
|
||||
### 3. 文本输入改进
|
||||
|
||||
鸿蒙的文本输入与 Android 不同,需要提供坐标:
|
||||
|
||||
```python
|
||||
# 带坐标的输入(鸿蒙特有)
|
||||
type_text("hello", x=100, y=100) # hdc shell uitest uiInput inputText 100 100 hello
|
||||
|
||||
# 无坐标输入(需要先点击输入框)
|
||||
tap(100, 100) # 先点击输入框
|
||||
type_text("hello") # 然后输入文本
|
||||
```
|
||||
|
||||
### 4. 命令输出显示
|
||||
|
||||
所有 HDC 命令都会自动显示在控制台:
|
||||
|
||||
```
|
||||
[HDC] Running command: hdc shell uitest uiInput click 500 1000
|
||||
[HDC] Running command: hdc shell screenshot /data/local/tmp/tmp.png
|
||||
[HDC] Running command: hdc file recv /data/local/tmp/tmp.png /tmp/screenshot_abc.png
|
||||
```
|
||||
|
||||
这有助于:
|
||||
- 调试问题
|
||||
- 学习 HDC 命令
|
||||
- 发现命令执行失败的原因
|
||||
|
||||
## 修改的文件清单
|
||||
|
||||
### 核心实现文件
|
||||
|
||||
0. **phone_agent/config/apps_harmonyos.py** ⭐ 新增
|
||||
- 鸿蒙应用 Bundle Name 映射表
|
||||
- 支持 80+ 常用应用
|
||||
- 包括第三方应用、华为系统应用、华为服务
|
||||
- 提供 `get_harmonyos_app_package()` 和 `list_harmonyos_apps()` 函数
|
||||
|
||||
1. **phone_agent/hdc/connection.py**
|
||||
- 添加 `_run_hdc_command()` 函数用于命令输出
|
||||
- 添加 `set_hdc_verbose()` 控制输出开关
|
||||
- 所有 subprocess.run() 替换为 _run_hdc_command()
|
||||
|
||||
2. **phone_agent/hdc/device.py**
|
||||
- ✅ `tap()` - 使用 `uitest uiInput click`
|
||||
- ✅ `double_tap()` - 使用 `uitest uiInput doubleClick`
|
||||
- ✅ `long_press()` - 使用 `uitest uiInput longClick`
|
||||
- ✅ `swipe()` - 使用 `uitest uiInput swipe`
|
||||
- ✅ `back()` - 使用 `uitest uiInput keyEvent Back`
|
||||
- ✅ `home()` - 使用 `uitest uiInput keyEvent Home`
|
||||
- ✅ `launch_app()` - 使用鸿蒙应用列表,启动命令包含 `-a EntryAbility`
|
||||
- ✅ `get_current_app()` - 使用鸿蒙应用列表识别当前应用
|
||||
|
||||
3. **phone_agent/hdc/screenshot.py**
|
||||
- 支持 `screenshot` 和 `snapshot_display` 两种命令
|
||||
- 自动降级处理
|
||||
|
||||
4. **phone_agent/hdc/input.py**
|
||||
- 支持带坐标的文本输入
|
||||
- 改进清除文本方法(使用组合键)
|
||||
|
||||
5. **phone_agent/hdc/__init__.py**
|
||||
- 导出 `set_hdc_verbose` 函数
|
||||
|
||||
### 主程序文件
|
||||
|
||||
6. **main.py**
|
||||
- 使用 HDC 时自动启用 verbose 模式
|
||||
- 支持 `--list-apps` 列出鸿蒙应用
|
||||
- 根据设备类型显示不同的应用列表
|
||||
|
||||
### 文档文件
|
||||
|
||||
7. **HDC_USAGE.md**
|
||||
- 更新所有命令对照表
|
||||
- 添加 `uitest uiInput` 命令说明
|
||||
- 添加方向滑动、组合键等鸿蒙特有功能
|
||||
- 更新示例输出
|
||||
- 添加常见问题解答
|
||||
|
||||
8. **HDC_IMPLEMENTATION_SUMMARY.md**(本文件)
|
||||
- 实现总结文档
|
||||
|
||||
## 命令对照速查表
|
||||
|
||||
### 必须使用 uitest uiInput 的命令
|
||||
|
||||
| 操作 | 命令格式 |
|
||||
|------|---------|
|
||||
| 点击 | `hdc shell uitest uiInput click X Y` |
|
||||
| 双击 | `hdc shell uitest uiInput doubleClick X Y` |
|
||||
| 长按 | `hdc shell uitest uiInput longClick X Y` |
|
||||
| 滑动 | `hdc shell uitest uiInput swipe X1 Y1 X2 Y2 DURATION` |
|
||||
| 快速滑动 | `hdc shell uitest uiInput fling X1 Y1 X2 Y2 500` |
|
||||
| 拖拽 | `hdc shell uitest uiInput drag X1 Y1 X2 Y2 500` |
|
||||
| 返回键 | `hdc shell uitest uiInput keyEvent Back` |
|
||||
| Home键 | `hdc shell uitest uiInput keyEvent Home` |
|
||||
| 文本输入 | `hdc shell uitest uiInput inputText X Y text` |
|
||||
|
||||
### 方向滑动(鸿蒙特有)
|
||||
|
||||
| 方向 | 命令格式 | 参数说明 |
|
||||
|------|---------|---------|
|
||||
| 左滑 | `hdc shell uitest uiInput dircFling 0 500` | 0=左,500=速度 |
|
||||
| 右滑 | `hdc shell uitest uiInput dircFling 1 600` | 1=右,600=速度 |
|
||||
| 上滑 | `hdc shell uitest uiInput dircFling 2` | 2=上 |
|
||||
| 下滑 | `hdc shell uitest uiInput dircFling 3` | 3=下 |
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 查看支持的应用
|
||||
|
||||
```bash
|
||||
# 列出所有支持的鸿蒙应用
|
||||
python main.py --device-type hdc --list-apps
|
||||
```
|
||||
|
||||
输出:
|
||||
```
|
||||
Supported HarmonyOS apps:
|
||||
- WPS
|
||||
- 阿里巴巴
|
||||
- 百度
|
||||
- 抖音
|
||||
- 淘宝
|
||||
- 小红书
|
||||
- 浏览器
|
||||
- 相机
|
||||
- 设置
|
||||
- (80+ 应用)
|
||||
```
|
||||
|
||||
### 基本使用
|
||||
|
||||
```bash
|
||||
# 使用 HDC 控制鸿蒙设备(自动显示所有命令)
|
||||
python main.py --device-type hdc --base-url http://localhost:8000/v1 --model "autoglm-phone-9b" "打开小红书"
|
||||
```
|
||||
|
||||
### 你会看到的输出
|
||||
|
||||
```
|
||||
[HDC] Running command: hdc list targets
|
||||
[HDC] Running command: hdc shell screenshot /data/local/tmp/tmp_screenshot.png
|
||||
[HDC] Running command: hdc file recv /data/local/tmp/tmp_screenshot.png /tmp/screenshot_xxx.png
|
||||
[HDC] Running command: hdc shell uitest uiInput click 500 1000
|
||||
[HDC] Running command: hdc shell aa start -b com.tencent.mm
|
||||
```
|
||||
|
||||
### 手动测试命令
|
||||
|
||||
```bash
|
||||
# 点击测试
|
||||
hdc shell uitest uiInput click 500 1000
|
||||
|
||||
# 双击测试
|
||||
hdc shell uitest uiInput doubleClick 500 1000
|
||||
|
||||
# 滑动测试
|
||||
hdc shell uitest uiInput swipe 100 500 900 500 500
|
||||
|
||||
# 返回键
|
||||
hdc shell uitest uiInput keyEvent Back
|
||||
```
|
||||
|
||||
## 关键改进点
|
||||
|
||||
1. **命令格式完全正确** - 所有 UI 操作都使用 `uitest uiInput`
|
||||
2. **自动命令显示** - 便于调试和学习
|
||||
3. **兼容性处理** - 截屏等命令支持新旧版本
|
||||
4. **详细文档** - 包含完整的命令对照和使用说明
|
||||
5. **易于切换** - 通过 `--device-type` 参数在 ADB 和 HDC 之间切换
|
||||
6. **独立应用列表** - 鸿蒙使用专用的应用配置,包含 80+ 常用应用
|
||||
7. **智能提示** - 应用启动失败时显示可用应用列表
|
||||
|
||||
## 测试建议
|
||||
|
||||
1. **连接测试**
|
||||
```bash
|
||||
hdc list targets
|
||||
python main.py --device-type hdc --list-devices
|
||||
```
|
||||
|
||||
2. **截屏测试**
|
||||
```bash
|
||||
hdc shell screenshot /data/local/tmp/test.jpeg
|
||||
hdc file recv /data/local/tmp/test.jpeg ~/test.jpeg
|
||||
```
|
||||
|
||||
3. **点击测试**
|
||||
```bash
|
||||
hdc shell uitest uiInput click 500 1000
|
||||
```
|
||||
|
||||
4. **完整流程测试**
|
||||
```bash
|
||||
python main.py --device-type hdc "打开设置"
|
||||
```
|
||||
|
||||
## 支持的鸿蒙应用
|
||||
|
||||
系统内置 80+ 常用鸿蒙应用,包括:
|
||||
|
||||
### 第三方应用(13个)
|
||||
百度、淘宝、WPS、快手、飞书、抖音、企业微信、同程旅行、唯品会、喜马拉雅、小红书等
|
||||
|
||||
### 华为系统应用(40+)
|
||||
浏览器、计算器、日历、相机、时钟、云盘、邮件、文件管理器、录音机、笔记、相册、联系人、短信、电话、设置、健康、地图、钱包、智慧生活等
|
||||
|
||||
### 华为服务(10+)
|
||||
应用市场、音乐、主题、天气、视频、阅读、游戏中心、搜索、我的华为等
|
||||
|
||||
### 添加新应用
|
||||
|
||||
如需添加新应用,编辑 `phone_agent/config/apps_harmonyos.py`:
|
||||
|
||||
```python
|
||||
HARMONYOS_APP_PACKAGES = {
|
||||
"应用名": "com.example.bundle.name",
|
||||
}
|
||||
```
|
||||
|
||||
查找 Bundle Name:
|
||||
```bash
|
||||
hdc shell bm dump -a | grep "关键词"
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. ⚠️ **文本输入**需要先点击输入框或提供坐标
|
||||
2. ⚠️ **应用列表**鸿蒙使用独立的应用配置(`apps_harmonyos.py`)
|
||||
3. ⚠️ **Bundle Name**与 Android 的 Package Name 不同
|
||||
4. ⚠️ **设备权限**确保开启 USB 调试和相关权限
|
||||
5. ✅ **命令输出**默认启用,方便调试
|
||||
6. ✅ **降级处理**截屏等命令有兜底方案
|
||||
7. ✅ **智能提示**应用未找到时会显示可用应用列表
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [awesome-hdc](https://github.com/codematrixer/awesome-hdc) - HDC 命令参考
|
||||
- [HarmonyOS 官方文档](https://developer.harmonyos.com/)
|
||||
- [OpenHarmony 文档](https://gitee.com/openharmony/docs)
|
||||
|
||||
## 版本信息
|
||||
|
||||
- 实现版本:v1.2.0
|
||||
- 支持的鸿蒙版本:HarmonyOS 2.0+
|
||||
- 支持的 HDC 版本:2.0.0a+
|
||||
- 支持的应用数量:80+ 常用应用
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v1.2.0 (2025-12-16)
|
||||
- ✅ 添加独立的鸿蒙应用配置文件
|
||||
- ✅ 内置 80+ 常用应用的 Bundle Name
|
||||
- ✅ 支持列出鸿蒙应用
|
||||
- ✅ 应用启动失败时智能提示
|
||||
- ✅ 更新文档添加应用查找方法
|
||||
|
||||
### v1.1.0 (2025-12-16)
|
||||
- ✅ 修正所有 HDC 命令格式为 `uitest uiInput`
|
||||
- ✅ 添加命令输出显示功能
|
||||
- ✅ 支持截屏命令降级处理
|
||||
- ✅ 完善文档和使用说明
|
||||
|
||||
### v1.0.0 (2025-12-16)
|
||||
- ✅ 初始 HDC 支持实现
|
||||
- ✅ 基础设备操作功能
|
||||
- ✅ ADB/HDC 切换支持
|
||||
|
||||
---
|
||||
|
||||
**实现完成!现在可以完美支持鸿蒙设备,包含 80+ 常用应用,所有命令都使用正确的 uitest uiInput 格式。**
|
||||
453
HDC_USAGE.md
453
HDC_USAGE.md
@@ -1,453 +0,0 @@
|
||||
# HDC 鸿蒙系统支持使用说明
|
||||
|
||||
本项目已添加对 HarmonyOS(鸿蒙系统)的支持,通过 HDC(HarmonyOS Device Connector)工具进行设备控制。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- ✅ 完整的 HDC 命令支持
|
||||
- ✅ 自动显示所有执行的 HDC 命令(便于调试)
|
||||
- ✅ 支持 USB 和远程连接
|
||||
- ✅ 与 ADB 相同的操作接口
|
||||
- ✅ 通过 `--device-type` 参数快速切换
|
||||
|
||||
## 安装 HDC
|
||||
|
||||
### 1. 下载 HDC 工具
|
||||
|
||||
从以下来源获取 HDC:
|
||||
- HarmonyOS SDK
|
||||
- OpenHarmony 官方仓库:https://gitee.com/openharmony/docs
|
||||
|
||||
### 2. 配置环境变量
|
||||
|
||||
将 HDC 可执行文件路径添加到系统 PATH:
|
||||
|
||||
**macOS/Linux:**
|
||||
```bash
|
||||
export PATH=$PATH:/path/to/hdc
|
||||
```
|
||||
|
||||
**Windows:**
|
||||
在系统环境变量中添加 HDC 所在目录到 PATH。
|
||||
|
||||
### 3. 验证安装
|
||||
|
||||
```bash
|
||||
hdc -v
|
||||
```
|
||||
|
||||
应该输出 HDC 版本信息。
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 基本使用
|
||||
|
||||
#### 使用 HDC 控制鸿蒙设备
|
||||
|
||||
```bash
|
||||
python main.py --device-type hdc --base-url http://localhost:8000/v1 --model "autoglm-phone-9b" "打开微信"
|
||||
```
|
||||
|
||||
#### 查看 HDC 命令输出
|
||||
|
||||
使用 HDC 时,所有命令都会自动显示,格式如下:
|
||||
|
||||
```
|
||||
[HDC] Running command: hdc list targets
|
||||
[HDC] Running command: hdc shell snapshot_display -f /data/local/tmp/tmp.png
|
||||
[HDC] Running command: hdc file recv /data/local/tmp/tmp.png /tmp/screenshot_xxx.png
|
||||
[HDC] Running command: hdc shell input tap 500 1000
|
||||
```
|
||||
|
||||
#### 使用环境变量
|
||||
|
||||
```bash
|
||||
# 设置默认使用 HDC
|
||||
export PHONE_AGENT_DEVICE_TYPE=hdc
|
||||
|
||||
# 控制 HDC 命令输出(默认已启用)
|
||||
export HDC_VERBOSE=true
|
||||
|
||||
# 运行
|
||||
python main.py "打开美团搜索附近的火锅店"
|
||||
```
|
||||
|
||||
### 设备管理
|
||||
|
||||
#### 列出连接的鸿蒙设备
|
||||
|
||||
```bash
|
||||
python main.py --device-type hdc --list-devices
|
||||
```
|
||||
|
||||
#### 连接远程鸿蒙设备
|
||||
|
||||
```bash
|
||||
# 通过 WiFi 连接
|
||||
python main.py --device-type hdc --connect 192.168.1.100:5555
|
||||
|
||||
# 连接后执行任务
|
||||
python main.py --device-type hdc --device-id 192.168.1.100:5555 "打开淘宝"
|
||||
```
|
||||
|
||||
#### 启用 TCP/IP 模式
|
||||
|
||||
```bash
|
||||
# 首先通过 USB 连接设备,然后启用 TCP/IP
|
||||
python main.py --device-type hdc --enable-tcpip 5555
|
||||
```
|
||||
|
||||
### 列出支持的鸿蒙应用
|
||||
|
||||
```bash
|
||||
python main.py --device-type hdc --list-apps
|
||||
```
|
||||
|
||||
输出示例:
|
||||
```
|
||||
Supported HarmonyOS apps:
|
||||
- WPS
|
||||
- 阿里巴巴
|
||||
- 百度
|
||||
- 抖音
|
||||
- 淘宝
|
||||
- 小红书
|
||||
- 浏览器
|
||||
- 相机
|
||||
- 设置
|
||||
- ...(更多应用)
|
||||
```
|
||||
|
||||
### 交互模式
|
||||
|
||||
```bash
|
||||
python main.py --device-type hdc --base-url http://localhost:8000/v1
|
||||
```
|
||||
|
||||
然后输入任务:
|
||||
```
|
||||
Enter your task: 打开小红书搜索美食
|
||||
Enter your task: 打开抖音刷视频
|
||||
Enter your task: quit
|
||||
```
|
||||
|
||||
## HDC 与 ADB 命令对照
|
||||
|
||||
### 基础命令对照
|
||||
|
||||
| 功能 | ADB 命令 | HDC 命令 |
|
||||
|------|----------|----------|
|
||||
| 列出设备 | `adb devices` | `hdc list targets` |
|
||||
| 连接远程设备 | `adb connect IP:PORT` | `hdc tconn IP:PORT` |
|
||||
| 断开设备 | `adb disconnect` | `hdc tdisconn` |
|
||||
| 启动应用 | `adb shell monkey -p PACKAGE` | `hdc shell aa start -b BUNDLE` |
|
||||
| 文件拉取 | `adb pull` | `hdc file recv` |
|
||||
| 文件推送 | `adb push` | `hdc file send` |
|
||||
|
||||
### UI 交互命令对照(重要)
|
||||
|
||||
鸿蒙系统使用 `uitest uiInput` 进行 UI 交互,与 Android 的 `input` 命令有很大不同:
|
||||
|
||||
| 功能 | ADB 命令 | HDC 命令 |
|
||||
|------|----------|----------|
|
||||
| 截屏 | `adb shell screencap -p` | `hdc shell screenshot /path/to/screenshot.jpeg` (仅支持JPEG) |
|
||||
| 点击 | `adb shell input tap X Y` | `hdc shell uitest uiInput click X Y` |
|
||||
| 双击 | `adb shell input tap X Y`(执行两次) | `hdc shell uitest uiInput doubleClick X Y` |
|
||||
| 长按 | `adb shell input swipe X Y X Y 1000` | `hdc shell uitest uiInput longClick X Y` |
|
||||
| 滑动 | `adb shell input swipe X1 Y1 X2 Y2 DURATION` | `hdc shell uitest uiInput swipe X1 Y1 X2 Y2 DURATION` |
|
||||
| 快速滑动 | - | `hdc shell uitest uiInput fling X1 Y1 X2 Y2 500` |
|
||||
| 拖拽 | - | `hdc shell uitest uiInput drag X1 Y1 X2 Y2 500` |
|
||||
| 返回键 | `adb shell input keyevent 4` | `hdc shell uitest uiInput keyEvent Back` |
|
||||
| Home键 | `adb shell input keyevent KEYCODE_HOME` | `hdc shell uitest uiInput keyEvent Home` |
|
||||
| 输入文本 | `adb shell input text "hello"` | `hdc shell uitest uiInput inputText X Y hello` |
|
||||
|
||||
### 方向滑动命令(鸿蒙特有)
|
||||
|
||||
```bash
|
||||
# 左滑
|
||||
hdc shell uitest uiInput dircFling 0 500
|
||||
|
||||
# 右滑
|
||||
hdc shell uitest uiInput dircFling 1 600
|
||||
|
||||
# 上滑
|
||||
hdc shell uitest uiInput dircFling 2
|
||||
|
||||
# 下滑
|
||||
hdc shell uitest uiInput dircFling 3
|
||||
```
|
||||
|
||||
### 组合键(鸿蒙特有)
|
||||
|
||||
```bash
|
||||
# 组合键粘贴操作
|
||||
hdc shell uitest uiInput keyEvent 2072 2038
|
||||
```
|
||||
|
||||
## 命令输出示例
|
||||
|
||||
当使用 HDC 时,你会看到类似以下的输出:
|
||||
|
||||
```bash
|
||||
$ python main.py --device-type hdc "打开微信并点击某个按钮"
|
||||
|
||||
🔍 Checking system requirements...
|
||||
--------------------------------------------------
|
||||
1. Checking HDC installation... ✅ OK (Ver: 2.0.0a)
|
||||
2. Checking connected devices... ✅ OK (1 device(s): FMR0223C13000649)
|
||||
3. Skipping keyboard check for HarmonyOS... ✅ OK (using native input)
|
||||
--------------------------------------------------
|
||||
✅ All system checks passed!
|
||||
|
||||
==================================================
|
||||
Phone Agent - AI-powered phone automation
|
||||
==================================================
|
||||
Model: autoglm-phone-9b
|
||||
Base URL: http://localhost:8000/v1
|
||||
Max Steps: 100
|
||||
Language: cn
|
||||
Device Type: HDC
|
||||
Device: FMR0223C13000649 (auto-detected)
|
||||
==================================================
|
||||
|
||||
Task: 打开微信并点击某个按钮
|
||||
|
||||
[HDC] Running command: hdc shell screenshot /data/local/tmp/tmp_screenshot.png
|
||||
[HDC] Running command: hdc file recv /data/local/tmp/tmp_screenshot.png /tmp/screenshot_abc123.png
|
||||
[HDC] Running command: hdc shell hidumper -s WindowManagerService -a -a
|
||||
|
||||
==================================================
|
||||
💭 思考过程:
|
||||
--------------------------------------------------
|
||||
需要启动微信应用
|
||||
--------------------------------------------------
|
||||
🎯 执行动作:
|
||||
{
|
||||
"_metadata": "do",
|
||||
"action": "Launch",
|
||||
"app": "微信"
|
||||
}
|
||||
==================================================
|
||||
|
||||
[HDC] Running command: hdc shell aa start -b com.tencent.mm
|
||||
[HDC] Running command: hdc shell screenshot /data/local/tmp/tmp_screenshot.png
|
||||
[HDC] Running command: hdc file recv /data/local/tmp/tmp_screenshot.png /tmp/screenshot_def456.png
|
||||
|
||||
==================================================
|
||||
💭 思考过程:
|
||||
--------------------------------------------------
|
||||
识别到按钮在坐标 (500, 1000),需要点击
|
||||
--------------------------------------------------
|
||||
🎯 执行动作:
|
||||
{
|
||||
"_metadata": "do",
|
||||
"action": "Tap",
|
||||
"element": [500, 1000]
|
||||
}
|
||||
==================================================
|
||||
|
||||
[HDC] Running command: hdc shell uitest uiInput click 540 2400
|
||||
|
||||
🎉 ================================================
|
||||
✅ 任务完成: 已成功完成任务
|
||||
==================================================
|
||||
```
|
||||
|
||||
## 调试技巧
|
||||
|
||||
### 1. 查看详细的 HDC 命令
|
||||
|
||||
HDC 模式下默认启用命令输出。如果需要关闭:
|
||||
|
||||
```python
|
||||
from phone_agent.hdc import set_hdc_verbose
|
||||
set_hdc_verbose(False)
|
||||
```
|
||||
|
||||
或通过环境变量:
|
||||
```bash
|
||||
export HDC_VERBOSE=false
|
||||
python main.py --device-type hdc "你的任务"
|
||||
```
|
||||
|
||||
### 2. 检查设备连接
|
||||
|
||||
```bash
|
||||
# 直接使用 HDC 命令检查
|
||||
hdc list targets
|
||||
|
||||
# 通过程序检查
|
||||
python main.py --device-type hdc --list-devices
|
||||
```
|
||||
|
||||
### 3. 测试单个命令
|
||||
|
||||
```bash
|
||||
# 截图测试(注意:必须使用 .jpeg 扩展名)
|
||||
hdc shell screenshot /data/local/tmp/test.jpeg
|
||||
hdc file recv /data/local/tmp/test.jpeg ~/test.jpeg
|
||||
|
||||
# 点击测试(使用 uitest)
|
||||
hdc shell uitest uiInput click 500 1000
|
||||
|
||||
# 双击测试
|
||||
hdc shell uitest uiInput doubleClick 500 1000
|
||||
|
||||
# 长按测试
|
||||
hdc shell uitest uiInput longClick 500 1000
|
||||
|
||||
# 滑动测试
|
||||
hdc shell uitest uiInput swipe 100 500 900 500 500
|
||||
|
||||
# 返回键
|
||||
hdc shell uitest uiInput keyEvent Back
|
||||
|
||||
# Home键
|
||||
hdc shell uitest uiInput keyEvent Home
|
||||
|
||||
# 启动应用测试
|
||||
hdc shell aa start -b com.example.app
|
||||
```
|
||||
|
||||
## 支持的鸿蒙应用
|
||||
|
||||
系统已内置常用鸿蒙应用的 Bundle Name 映射,包括:
|
||||
|
||||
### 第三方应用
|
||||
- 百度、淘宝、WPS、快手、飞书、抖音、企业微信
|
||||
- 同程旅行、唯品会、喜马拉雅、小红书
|
||||
|
||||
### 华为系统应用
|
||||
- 工具类:浏览器、计算器、日历、相机、时钟、云盘、邮件、文件管理器、录音机、笔记
|
||||
- 媒体类:相册、图库
|
||||
- 通讯类:联系人、短信、电话
|
||||
- 设置类:设置
|
||||
- 生活服务:健康、地图、钱包、智慧生活、小艺
|
||||
|
||||
### 华为服务
|
||||
- 应用市场、音乐、主题、天气、视频、阅读、游戏中心、搜索、我的华为
|
||||
|
||||
查看完整列表:
|
||||
```bash
|
||||
python main.py --device-type hdc --list-apps
|
||||
```
|
||||
|
||||
### 添加新应用
|
||||
|
||||
如果你需要的应用不在列表中,可以手动添加到 `phone_agent/config/apps_harmonyos.py`:
|
||||
|
||||
```python
|
||||
HARMONYOS_APP_PACKAGES = {
|
||||
# ...
|
||||
"你的应用名": "com.example.bundle.name",
|
||||
}
|
||||
```
|
||||
|
||||
或者在运行时查找应用的 Bundle Name:
|
||||
```bash
|
||||
# 列出设备上所有已安装的应用
|
||||
hdc shell bm dump -a
|
||||
|
||||
# 查找特定应用的包名
|
||||
hdc shell bm dump -a | grep "应用关键词"
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **UI 交互命令差异**:
|
||||
- 鸿蒙使用 `uitest uiInput` 系列命令,与 Android 的 `input` 命令完全不同
|
||||
- 所有点击、滑动等操作都通过 `uitest uiInput` 执行
|
||||
- 文本输入在鸿蒙上需要提供坐标:`inputText X Y text`
|
||||
|
||||
2. **应用包名差异**:
|
||||
- 鸿蒙应用使用 Bundle Name 而非 Android 的 Package Name
|
||||
- 已内置常用应用的 Bundle Name 映射
|
||||
- 启动应用时使用 `-a EntryAbility` 指定主入口
|
||||
|
||||
3. **输入法支持**:
|
||||
- 鸿蒙系统使用原生输入法,不需要安装 ADB Keyboard
|
||||
- 文本输入通过 `uitest uiInput inputText` 命令,需要先点击输入框获得焦点
|
||||
- 或者直接提供输入框坐标进行输入
|
||||
|
||||
4. **权限设置**:
|
||||
- 确保鸿蒙设备已开启 USB 调试
|
||||
- 某些操作可能需要额外的安全设置权限
|
||||
- 部分设备可能需要开启"允许模拟位置"等选项
|
||||
|
||||
5. **命令输出**:所有 HDC 命令都会显示在控制台,这有助于:
|
||||
- 调试问题
|
||||
- 了解系统如何与设备交互
|
||||
- 学习 HDC 命令的使用
|
||||
- 发现命令执行失败的原因
|
||||
|
||||
6. **截屏命令兼容性**:
|
||||
- ⚠️ **重要**:鸿蒙 HDC 只支持 JPEG 格式,不支持 PNG
|
||||
- 新版本鸿蒙:`hdc shell screenshot /data/local/tmp/screenshot.jpeg`
|
||||
- 旧版本鸿蒙:`hdc shell snapshot_display -f /data/local/tmp/screenshot.jpeg`
|
||||
- 系统会自动尝试两种方法,并将 JPEG 转换为 PNG 供模型使用
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: HDC 命令输出太多,如何关闭?
|
||||
|
||||
A: 设置环境变量 `HDC_VERBOSE=false` 或在代码中调用 `set_hdc_verbose(False)`。
|
||||
|
||||
### Q: 如何在 Android 和鸿蒙设备之间切换?
|
||||
|
||||
A: 使用 `--device-type` 参数:
|
||||
- Android: `--device-type adb`(默认)
|
||||
- 鸿蒙: `--device-type hdc`
|
||||
|
||||
### Q: 能否同时连接 Android 和鸿蒙设备?
|
||||
|
||||
A: 同一时间只能使用一种设备类型。如需切换,重新运行程序并指定不同的 `--device-type`。
|
||||
|
||||
### Q: HDC 与 ADB 的功能有什么区别?
|
||||
|
||||
A: 核心功能相同,但有重要差异:
|
||||
- **UI 交互命令完全不同**:HDC 使用 `uitest uiInput` 而不是 `input`
|
||||
- 应用管理方式不同(Bundle vs Package)
|
||||
- 某些系统服务名称不同
|
||||
- 文本输入方式不同(HDC 需要坐标)
|
||||
|
||||
### Q: 为什么文本输入不工作?
|
||||
|
||||
A: 鸿蒙的文本输入与 Android 不同:
|
||||
1. 方式一:先用 `click` 点击输入框,然后系统会尝试使用 `input text` 命令
|
||||
2. 方式二:直接使用 `uitest uiInput inputText X Y text`,需要知道输入框坐标
|
||||
3. 推荐先点击输入框获得焦点,然后输入文本
|
||||
|
||||
### Q: 我的命令执行失败了怎么办?
|
||||
|
||||
A: 查看控制台输出的 HDC 命令:
|
||||
1. 检查命令格式是否正确(特别注意 `uitest uiInput` 格式)
|
||||
2. 手动在终端执行相同命令测试
|
||||
3. 检查设备权限设置
|
||||
4. 确认鸿蒙版本是否支持该命令
|
||||
|
||||
### Q: 如何找到应用的 Bundle Name?
|
||||
|
||||
A: 使用以下方法:
|
||||
1. 列出所有应用:`hdc shell bm dump -a`
|
||||
2. 搜索特定应用:`hdc shell bm dump -a | grep "关键词"`
|
||||
3. 查看应用详情:`hdc shell bm dump -n <bundle_name>`
|
||||
4. 将找到的 Bundle Name 添加到 `apps_harmonyos.py` 配置文件
|
||||
|
||||
### Q: 为什么应用启动失败?
|
||||
|
||||
A: 可能的原因:
|
||||
1. Bundle Name 不正确 - 检查应用是否在 `apps_harmonyos.py` 中
|
||||
2. Ability 名称不对 - 大部分应用使用 "EntryAbility",少数可能不同
|
||||
3. 应用未安装 - 确认设备上已安装该应用
|
||||
4. 权限问题 - 某些应用可能需要额外权限
|
||||
|
||||
## 技术支持
|
||||
|
||||
如遇到问题,请提供以下信息:
|
||||
|
||||
1. HDC 版本:`hdc -v`
|
||||
2. 设备信息:`hdc list targets`
|
||||
3. 错误日志(包含命令输出)
|
||||
4. 鸿蒙系统版本
|
||||
|
||||
提交 Issue:https://github.com/zai-org/Open-AutoGLM/issues
|
||||
Reference in New Issue
Block a user