Metadata-Version: 2.4
Name: dailo-devtools
Version: 0.1.2
Summary: 通过代劳 DevTools 调试单台 Android 设备的 Python API 与 CLI
License-Expression: MIT
Project-URL: Script SDK, https://pypi.org/project/dailo-sdk/
Keywords: android,automation,dailo,devtools,cli
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Framework :: AsyncIO
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: playwright<2,>=1.58
Requires-Dist: aiohttp<4,>=3.14
Dynamic: license-file

# Dailo DevTools

在电脑上运行和调试代劳 Android 自动化脚本。提供 `dailo-dev` 命令行工具和异步 Python 客户端，可执行脚本、读取文字与控件、保存截图和查看日志。

- 命令行执行 Python 文件或短代码。
- Python API 支持连接设备、截图、观察和停止运行。
- 自动携带脚本目录中的 Python 模块与 `assets/`。
- 图文日志保存到电脑，可离线查看。

## 安装

需要 Python 3.11 或更新版本，以及已安装代劳 App、开启 DevTools 的 Android 设备。

```sh
python -m pip install dailo-devtools
dailo-dev install
```

`dailo-dev install` 安装后台连接所需的 Chromium 运行时，只需执行一次。

## 连接设备

从代劳 App 的 DevTools 入口复制连接链接，保存为 `connection.json`：

```json
{
  "url": "<从代劳 App 复制的 DevTools 链接>"
}
```

启动连接服务：

```sh
dailo-dev serve --connection connection.json
```

保持服务运行，在另一个终端执行后续命令。连接文件包含访问设备的凭据，请保存在本机；链接过期或重新连接时，从 App 获取新链接。

## 运行脚本

执行一段代码：

```sh
dailo-dev exec --code "from dailo import text; print(text())"
```

执行 Python 文件并传入任务设置：

```sh
dailo-dev exec --file main.py --config settings.json
```

脚本可使用 [dailo-sdk](https://pypi.org/project/dailo-sdk/) 的文字、控件和图片定位 API。文件模式会自动上传脚本目录中的 Python 模块和 `assets/`；`--timeout` 设置执行时限，单位为秒，默认 300。

## 常用命令

| 命令 | 用途 |
| --- | --- |
| `dailo-dev status` | 查看连接和运行状态 |
| `dailo-dev inspect` | 读取设备画面的文字与控件 |
| `dailo-dev screenshot screen.png` | 保存设备截图 |
| `dailo-dev cancel` | 停止当前脚本 |
| `dailo-dev reconnect` | 使用持久连接配置重新连接设备 |
| `dailo-dev logs <日志目录>` | 离线查看图文日志 |

运行 `dailo-dev --help` 或 `dailo-dev exec --help` 查看完整选项。

## Python API

```python
import asyncio
import json
from pathlib import Path

from dailo_devtools import Device, read_logs


async def main():
    connection = json.loads(Path("connection.json").read_text(encoding="utf-8"))

    async with Device(connection) as device:
        result = await device.execute("from dailo import text; print(text())")
        await device.screenshot("screen.png")
        print(result)
        print(read_logs(result["logDirectory"]))


asyncio.run(main())
```

`Device` 还提供 `run_file(path, config=...)`、`inspect()` 和 `cancel()`。使用 Python 客户端时无需启动 `dailo-dev serve`；异步上下文管理器负责建立和关闭连接。

## 许可

MIT。
