Files
Open-AutoGLM/HDC_IMPLEMENTATION_SUMMARY.md
2025-12-16 14:28:49 +08:00

338 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 格式。**