返回顶部
d

droidrun-agentDroidRun代理

DroidRun Portal HTTP/WebSocket/MCP client. Controls Android devices via HTTP, WebSocket, or MCP server, supporting tap, swipe, screenshot, text input, UI state retrieval and more. Use this skill when the user needs to interact with an Android device running DroidRun Portal.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.1.0
安全检测
已通过
142
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

droidrun-agent

技能名称: droidrun-agent

详细描述:

Droidrun Agent

提供两个异步客户端(PortalHTTPClient 和 PortalWSClient)、一个配置辅助类(PortalConfig)以及一个内置的 MCP 服务器,用于与运行 DroidRun Portal 的 Android 设备通信。所有客户端方法均为 async 并支持 async with 上下文管理器。

安装

bash
cd droidrun-agent && uv sync # 仅核心功能
cd droidrun-agent && uv sync --extra mcp # 包含 MCP 服务器支持

PortalHTTPClient

使用 Bearer 令牌认证与 Portal 的 HTTP 服务器(默认端口 8080)通信。

python
from droidrun_agent import PortalHTTPClient

async with PortalHTTPClient(baseurl=http://192.168.1.100:8080, token=YOURTOKEN) as client:
await client.ping()
state = await client.getstatefull()
await client.tap(200, 400)
png = await client.take_screenshot()

查询方法(GET)

签名返回类型描述
ping()dict健康检查,无需认证
geta11ytree()
dict | 简化的无障碍树 | | geta11ytree_full(*, filter: bool = True) | dict | 完整的无障碍树,filter=False 保留小元素 | | get_state() | dict | 简化的 UI 状态 | | getstatefull(*, filter: bool = True) | dict | 完整的 UI 状态(a11ytree + phonestate),filter=False 保留小元素 | | getphonestate() | dict | 手机状态信息(当前应用、活动、键盘状态等) | | get_version() | str | Portal 应用版本字符串 | | get_packages() | list[dict] | 可启动应用列表,每个包含 packageName、label 等 | | takescreenshot(*, hideoverlay: bool = True) | bytes | 设备截图,返回 PNG 字节数据,hide_overlay=False 显示覆盖层 |

操作方法(POST)

签名返回类型描述
tap(x: int, y: int)dict点击屏幕坐标
swipe(startx: int, starty: int, endx: int, endy: int, duration: int \
None = None) | dict | 滑动手势,duration 为可选的持续时间(毫秒) | | global_action(action: int) | dict | 执行 Android 无障碍全局操作(1=返回,2=主页,3=最近任务) | | startapp(package: str, activity: str \| None = None, stopbefore_launch: bool = False) | dict | 启动应用 | | stop_app(package: str) | dict | 尽力停止应用 | | input_text(text: str, clear: bool = True) | dict | 输入文本(自动 base64 编码),clear=True 先清空字段 | | clear_input() | dict | 清空焦点输入字段 | | presskey(keycode: int) | dict | 发送 Android 键码(例如 66=回车,3=主页,4=返回) | | setoverlayoffset(offset: int) | dict | 设置覆盖层垂直偏移量(像素) | | setsocketport(port: int) | dict | 更新 HTTP 服务器端口 |

PortalWSClient

使用 JSON-RPC 风格消息与 Portal 的 WebSocket 服务器(默认端口 8081)通信。当在断开的连接上调用方法时自动重连。

python
from droidrun_agent import PortalWSClient

async with PortalWSClient(ws://192.168.1.100:8081, token=YOUR_TOKEN) as ws:
await ws.tap(200, 400)
state = await ws.get_state()
png = await ws.take_screenshot()
timems = await ws.gettime()

方法

支持 PortalHTTPClient 的所有操作方法(tap、swipe、globalaction、startapp、stopapp、inputtext、clearinput、presskey、setoverlayoffset、setsocketport、take_screenshot),签名相同。

查询方法:

签名返回类型描述
getpackages()Any可启动包列表
getstate(*, filter: bool = True)
Any | 完整状态,filter=False 保留小元素 |
| get_version() | Any | Portal 版本字符串 |
| get_time() | Any | 设备 Unix 时间戳(毫秒) |
| install(urls: list[str], hide_overlay: bool = True) | Any | 从 URL 安装 APK,支持拆分 APK(仅 WebSocket) |

WebSocket 截图自动解析二进制帧并直接返回 PNG bytes。

异常

所有异常继承自 PortalError:

异常触发条件
PortalError基础异常
PortalConnectionError
无法连接到 Portal 服务器 |
| PortalAuthError | 无效或缺失令牌(HTTP 401/403) |
| PortalTimeoutError | 请求超时 |
| PortalResponseError | 服务器返回意外状态或错误 |

完整使用示例

python
import asyncio
from droidrun_agent import PortalHTTPClient, PortalWSClient

async def demo_http():
async with PortalHTTPClient(http://localhost:8080, token=YOUR_TOKEN) as client:
print(await client.ping())
print(Version:, await client.get_version())
print(Packages:, len(await client.get_packages()))

await client.tap(500, 800)
await client.swipe(500, 1500, 500, 500, duration=300)
await client.input_text(Hello World)
await client.press_key(66) # 回车

state = await client.getstatefull()
png = await client.take_screenshot()
print(fScreenshot: {len(png)} bytes)

async def demo_ws():
async with PortalWSClient(ws://localhost:8081, token=YOUR_TOKEN) as ws:
print(Version:, await ws.get_version())
print(Time:, await ws.get_time())

await ws.tap(500, 800)
await ws.start_app(com.android.settings)

png = await ws.take_screenshot()
print(fScreenshot: {len(png)} bytes)

asyncio.run(demo_http())
asyncio.run(demo_ws())

PortalConfig

用于管理连接设置的辅助数据类。支持直接构造或从环境变量加载。

python
from droidrun_agent import PortalConfig

直接构造

config = PortalConfig(baseurl=http://192.168.1.100:8080, token=YOURTOKEN) client = config.create_client()

从环境变量加载

config = PortalConfig.from_env() client = config.create_client()
字段类型默认值描述
base_urlstr(必需)Portal HTTP 或 WebSocket 基础 URL
token
str | (必需) | Bearer 认证令牌 | | timeout | float | 10.0 | 请求超时时间(秒) | | transport | str | http | http 或 ws |

fromenv() 的环境变量:PORTALBASEURL、PORTALTOKEN、PORTALTIMEOUT、PORTALTRANSPORT。

MCP 服务器

内置的 MCP(模型上下文协议)服务器将所有 Portal 操作作为工具暴露,用于 AI 代理集成。需要 mcp 可选依赖(pip install droidrun-agent[mcp])。

启动服务器

bash

通过 CLI 入口点


droidrun-agent --mcp

或作为 Python 模块

python -m droidrun_agent --mcp

服务器从环境变量读取 PORTALBASEURL、PORTALTOKEN、PORTALTIMEOUT 和 PORTAL_TRANSPORT,并通过 stdio 通信。

MCP 工具

| 工具 | 描述 |
|------|-------------|

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 droidrun-agent-1776276842 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 droidrun-agent-1776276842 技能

通过命令行安装

skillhub install droidrun-agent-1776276842

下载

⬇ 下载 droidrun-agent v0.1.0(免费)

文件大小: 3.53 KB | 发布时间: 2026-4-17 14:42

v0.1.0 最新 2026-4-17 14:42
Initial release of droidrun-agent: async Python clients and MCP server for interfacing with DroidRun Portal on Android devices.

- Added PortalHTTPClient and PortalWSClient for controlling Android devices via HTTP or WebSocket.
- Supported features: tap, swipe, screenshot, text input, retrieve UI/phone state, launch/stop apps, and more.
- Included PortalConfig for easy configuration via constructor or environment variables.
- Provided a built-in MCP server for exposing all Portal operations as tools, with CLI and module entry points.
- Comprehensive async API with exception handling for connection, timeout, and authentication errors.
- Full documentation and usage examples included.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部