七千二百袋水泥
七千二百袋水泥
Published on 2025-06-19 / 5 Visits

Android AI Agent 实现思路的一些记录

在构建Android AI agent时,根据AI操作的发起位置,主要有两种实现路径:

1. 外部操作模式:基于ADB的方案

当AI agent运行在Android设备外部(如PC、服务器)时,通过ADB(Android Debug Bridge)进行设备控制是最直接有效的方案。核心思路是将ADB命令封装为工具函数或MCP(Model Context Protocol)工具,让AI能够调用这些工具来操作Android设备。

简单案例:ADB滑动操作

import subprocess

def adb_swipe(x1, y1, x2, y2, duration=500):
    """通过ADB实现屏幕滑动"""
    cmd = f"adb shell input swipe {x1} {y1} {x2} {y2} {duration}"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    return result.returncode == 0

# 使用示例:向上滑动屏幕
adb_swipe(540, 1500, 540, 500, 1000)  # 从屏幕下方滑到上方

2. 内部操作模式:基于无障碍服务的方案

当AI agent运行在Android设备内部时,利用Android的无障碍服务(Accessibility Service)是最佳选择。无障碍服务提供了丰富的系统级API,可以获取界面信息并执行各种操作。也可以使用基于无障碍服务封装的第三方库,如AutoJS等。

简单案例:基于无障碍的滑动操作

// 在无障碍服务中实现滑动手势
public void performSwipeGesture(int startX, int startY, int endX, int endY, long duration) {
    Path swipePath = new Path();
    swipePath.moveTo(startX, startY);
    swipePath.lineTo(endX, endY);
    
    GestureDescription.Builder gestureBuilder = new GestureDescription.Builder();
    gestureBuilder.addStroke(new GestureDescription.StrokeDescription(swipePath, 0, duration));
    
    // 执行手势
    dispatchGesture(gestureBuilder.build(), null, null);
}

// 使用示例:向上滑动屏幕
performSwipeGesture(540, 1500, 540, 500, 1000);  // 从屏幕下方滑到上方

方案对比

特性

ADB方案

无障碍方案

部署位置

设备外部

设备内部

权限要求

USB调试权限

无障碍服务权限

功能丰富度

基础操作

丰富的界面交互

开发复杂度

简单

中等

性能开销

较小

中等

根据具体需求选择合适的方案,外部控制选择ADB,内部集成选择无障碍服务。两种方案都可以很好地支持AI agent对Android设备的智能操作。

关于

uiautomator2:https://github.com/openatx/uiautomator2

Python客户端 (uiautomator2)
    ↓ HTTP请求
HTTP RPC Server (ATX Agent)
    ↓ 调用Java层
UiAutomator2 Java Framework
    ↓ 基于
UiAutomation 类 (android.app.UiAutomation)
    ↓ 依赖
Accessibility Service (无障碍服务)
    ↓ 系统调用
Android Framework


Auto.js
JavaScript 脚本(Auto.js 客户端)
    ↓ 调用封装 API(如 click(), swipe(), text() 等)
Auto.js Java 框架(Rhino/V8 + Java 封装)
    ↓ 调用封装的 Java 接口(UIAutomator、Shell 等)
Accessibility Controller (基于 AccessibilityService 实现)
    ↓
系统级无障碍服务(Accessibility Service)
    ↓
Android Framework(WindowManagerService / InputManager)
    ↓
底层触控事件 / 界面节点管理(系统调用)