Skip to content

Conversation

@shouldnotappearcalm
Copy link

概述

  • phone_agent 引入统一的设备控制抽象层,使 PhoneAgent 可以面向接口编程,解耦具体设备实现。
  • 在保留原有 Android + ADB 行为的前提下,新增 HarmonyOS(基于 hdc + uitest)的控制后端,支持控制鸿蒙虚拟机 / 设备。

主要改动

  • 设备抽象

    • 新增 DeviceController 接口,统一封装:截屏、点击、滑动、文本输入、系统返回/Home、应用启动、当前 App 获取等能力。
    • 原 ADB 相关逻辑重构为 AdbDeviceController 实现,集中承接现有 ADB 行为,便于后续扩展其它平台。
  • HarmonyOS 支持

    • 新增 HarmonyDeviceController,通过 hdcuitest 命令与鸿蒙设备交互:
      • 使用 hdc 截屏并拉取到本地,供模型视觉输入使用。
      • 通过 uitest uiInput 执行点击、滑动、系统按键和文本输入等操作。
    • 不依赖 ADB 或 ADB Keyboard,可在仅有 Harmony 环境的情况下运行。
  • Agent 与 Action 解耦

    • PhoneAgent 不再直接依赖 adb 模块,而是接受一个设备后端(ADB 或 Harmony),只面向抽象的 DeviceController
    • ActionHandler 从直接调用 adb 函数,改为调用注入的 DeviceController,动作语义保持不变(Tap/Swipe/Type/Back/Home 等)。
  • CLI 扩展

    • main.py 新增设备相关参数:
      • --backend {adb,harmony}:选择设备控制后端(默认 adb,兼容原行为)。
      • --hdc-path PATH:在 backend=harmony 时指定 hdc 可执行文件路径。
    • 系统检查逻辑根据后端类型分支:
      • backend=adb:保留原有 ADB 工具 / 设备 / ADB Keyboard 检查。
      • backend=harmony:跳过 ADB 相关检查,避免在纯 Harmony 场景下被阻塞。

使用说明

  • Android / ADB 模式(与原来保持一致)

    python main.py \
      --base-url "http://localhost:8000/v1" \
      --model "autoglm-phone-9b" \
      --apikey "YOUR_API_KEY" \
      --lang cn \
      "打开微信查看消息"
  • HarmonyOS / hdc 模式

    python main.py \
      --backend harmony \
      --hdc-path "/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc" \
      --base-url "http://localhost:8000/v1" \
      --model "autoglm-phone" \
      --apikey "YOUR_API_KEY" \
      --lang cn \
      "在鸿蒙虚拟机里打开浏览器并搜索鸿蒙开发文档"
  • 可选环境变量

    export PHONE_AGENT_BACKEND=harmony
    export PHONE_AGENT_HDC_PATH="/Applications/DevEco-Studio.app/Contents/sdk/default/openharmony/toolchains/hdc"

    之后可省略 --backend--hdc-path 参数,直接通过 main.py 传入模型和任务即可。

兼容性与影响

  • 对默认 Android / ADB 使用方式无行为破坏,原有脚本和调用方式可以不做修改继续使用。
  • 新增 HarmonyOS 后端和 CLI 参数是向后兼容的扩展,为未来接入更多平台(如其他移动 OS 或桌面环境)提供了统一的设备层抽象。

- Introduce device controller abstraction (base.py) to support multiple backends
- Implement AdbDeviceController for Android devices
- Implement HarmonyDeviceController for HarmonyOS devices via hdc
- Add --backend and --hdc-path CLI arguments to main.py
- Refactor ActionHandler to use device controller interface
- Skip ADB checks when using Harmony backend
@shouldnotappearcalm shouldnotappearcalm changed the title feat: 为 PhoneAgent 引入设备抽象,新增 HarmonyOS(hdc) 控制后端 feat: 支持控制 HarmonyOS(hdc) Dec 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants