关于 androidbuild-mcp
androidbuild-mcp 是面向 Android 应用开发和工具链操作的 Agent MCP 服务。它将 Gradle 构建与测试、设备管理、部署、UI 自动化及日志检查整合在一起。
主要功能
- 01构建、测试、Lint 和覆盖率工具
- 02模拟器与设备管理
- 03APK 安装和应用生命周期控制
- 04UI 检查、截图与交互
- 05Logcat 捕获和崩溃检查
- 06Compose 项目脚手架
适用场景
- 01通过 Agent 构建和测试 Android 项目
- 02部署应用并自动操作模拟器
- 03检查应用崩溃及筛选后的设备日志
- 04生成 Compose 起始项目
MCP 相关
该服务通过 stdio 向 MCP 客户端提供 Android 开发和设备控制工具,包括构建、测试、部署、UI 自动化及日志访问。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
53收录的工具列表 · 更新于 3 周前
此工具无需参数。
详细介绍
AndroidBuildMCP
让你的 AI Agent 亲自操作 Android。AndroidBuildMCP 是一款 MCP 服务,可让任何 MCP 客户端(Claude Code、Cursor 等)构建、部署、操作和调试真实的 Android 应用:提供易读错误信息的 Gradle 构建、模拟器管理、adb 部署、logcat 捕获和完整的 UI 自动化。
快速开始
要求:Node 18+、Android SDK(通过 ANDROID_HOME 指定或使用默认安装路径),以及用于 Gradle 构建的 JDK 17+。
无需安装步骤——首次运行时,npx 会获取该服务。
Claude Code
claude mcp add androidbuild -- npx -y @asjackson/androidbuild-mcp
其他 MCP 客户端
{
"mcpServers": {
"androidbuild": {
"command": "npx",
"args": ["-y", "@asjackson/androidbuild-mcp"]
}
}
}
改为从源码运行
git clone https://github.com/dev-jackson/androidbuild-mcp.git
cd androidbuild-mcp
npm install && npm run build
claude mcp add androidbuild -- node /absolute/path/to/androidbuild-mcp/dist/index.js
然后让你的 Agent 运行 doctor——它会检查 SDK、adb、模拟器、Java 和已连接设备,并准确告知缺少什么。
你的 Agent 可以做什么
- 构建和测试 —
build_app会编译项目,并返回精简的file:line编译错误,而不是上千行 Gradle 输出。test_app/test_instrumented会返回解析后的通过/失败摘要。还包括 Lint、清理和覆盖率(Kover/Jacoco)。 - 管理模拟器 — 列出、创建、启动(等待完全启动并返回序列号)、清除和关闭 AVD。设置 GPS 位置、深色模式,以及用于截图的干净演示状态栏。
- 部署 —
build_run一次调用即可完成编译、安装和启动。通过 adb 安装、卸载、清除数据、查看应用信息;仅连接一台设备时会自动选择该设备。 - 查看屏幕 —
snapshot_ui会将 UI 作为紧凑的命名元素列表返回,并附带点击坐标(合并 Compose 语义并过滤噪声)。screenshot会返回图像;设置annotate: true后,会使用视觉功能绘制带编号的框,识别图像和 WebView 中的文本。 - 操作屏幕 — 点击、滚动、滑动、拖动、长按、输入文字(支持键盘,并可清除/提交)、使用硬件按键,以及通过
wait_for_ui轮询直到指定元素出现。 - 读取日志 — 在后台捕获经过应用过滤的 logcat、一次性转储日志,以及获取包含堆栈跟踪的崩溃缓冲区。
- 启动新应用 —
scaffold_android_project会生成一个开箱即用、可直接构建的最小 Compose 项目。
会话默认设置(session_set_defaults)让你只需配置一次项目、模块、变体和设备——之后的所有调用都无需传入参数。
工具参考
共 53 个工具,通过 stdio 使用。每个工具都接收普通参数并返回文本(screenshot 除外,它会返回图像)。
环境和项目
| 工具 | 描述 |
|---|---|
doctor | 检查 SDK、adb、模拟器、avdmanager、Java 和已连接的设备;报告缺少的项目 |
discover_projects | 在指定路径下查找 Android/Gradle 项目 |
list_modules | 列出 settings.gradle(.kts) 中声明的模块 |
list_variants | 列出模块的构建变体 |
get_app_id | 读取模块的 applicationId |
show_gradle_config | 显示 Gradle、AGP、Kotlin 和版本目录条目 |
会话默认值
| 工具 | 描述 |
|---|---|
session_set_defaults | 为之后的所有调用设置默认项目、模块、变体、序列号和 appId |
session_show_defaults | 显示当前默认值 |
session_clear_defaults | 清除所有默认值,或只清除列出的键 |
构建、测试和质量
| 工具 | 描述 |
|---|---|
build_app | 构建 APK;返回精简的 file:line 编译器错误 |
build_run | 在一次调用中完成构建、安装和启动 |
test_app | 运行 JVM 单元测试并提供解析后的通过/失败摘要 |
test_instrumented | 在设备上运行插桩测试 |
lint | 运行 Android Lint 并汇总报告 |
clean | 运行 gradle clean |
get_apk_path | 查找最新的 APK,但不执行构建 |
stop_gradle | 停止项目的 Gradle 守护进程 |
get_coverage_report | 运行 Kover/Jacoco 并汇总各软件包的行覆盖率 |
get_file_coverage | 显示单个源文件中已覆盖/未覆盖的行 |
设备和模拟器
| 工具 | 描述 |
|---|---|
list_devices | 列出设备及其序列号、状态、型号、Android 版本和 API 级别 |
list_avds | 列出 AVD 及其运行状态 |
boot_emulator | 启动 AVD 并等待其完全启动;返回序列号 |
kill_emulator | 关闭正在运行的模拟器 |
create_avd | 根据已安装的系统映像创建 AVD |
delete_avd | 删除 AVD |
set_emulator_location | 设置 GPS 位置 |
set_appearance | 切换深色/浅色模式 |
statusbar_demo_mode | 清理状态栏,以便截图 |
应用生命周期
| 工具 | 描述 |
|---|---|
install_app | 安装 APK(adb install -r) |
launch_app | 根据应用 ID 启动应用,并解析启动器 Activity |
stop_app | 强行停止正在运行的应用 |
uninstall_app | 卸载应用 |
clear_app_data | 将应用重置为全新安装状态 |
get_app_info | 查看版本、目标/最低 SDK、安装路径和运行中的 PID |
UI 自动化
| 工具 | 描述 |
|---|---|
snapshot_ui | 将 UI 转储为带名称的元素,并提供精确的点击坐标 |
screenshot | 捕获屏幕;annotate: true 会绘制带编号的方框 |
tap_element | 点击上一张带注释截图中的元素 #N |
tap | 按像素坐标或屏幕百分比点击 |
scroll | 朝指定方向滚动,并使用计算得出的安全滑动操作 |
swipe | 在两点之间滑动 |
drag | 从一点拖动到另一点 |
long_press | 长按 1000 ms |
type_text | 等待键盘就绪后,在当前聚焦的字段中输入文本 |
key_press | 按下 BACK、HOME、ENTER、DPAD_* 或任意键码 |
key_sequence | 按顺序按下多个按键 |
wait_for_ui | 轮询,直到某个元素出现 |
日志和录制
| 工具 | 描述 |
|---|---|
get_logs | 一次性转储 logcat,可按应用和标签筛选 |
get_crash_logs | 获取崩溃缓冲区:Java 异常、原生崩溃和 ANR |
start_log_capture | 开始在后台捕获 logcat 并写入文件 |
stop_log_capture | 停止捕获并返回文件及最后几行 |
record_video_start | 开始录屏(最长 3 分钟) |
record_video_stop | 停止录制并拉取 MP4 文件 |
脚手架
| 工具 | 描述 |
|---|---|
scaffold_android_project | 创建一个开箱即用的最简 Compose 应用 |
精准点击
所有 adb 端操作共用一个坐标空间(设备像素),但 MCP 客户端通常会对屏幕截图进行缩放——凭肉眼估算图像中的像素位置,会导致点击落在错误位置。以下三种方式都能安全地命中目标:
snapshot_ui— 返回每个命名元素的精确设备像素中心坐标。首选。screenshot { annotate: true }+tap_element { element: N }— 按图像上标出的编号点击;映射是在原始 PNG 上解析的,因此客户端缩放不会造成偏差。tap { xPct, yPct }— 使用屏幕百分比(0-1),long_press/swipe/drag 也支持此方式。与分辨率无关。
如果你掌握真实的像素坐标,仍可使用原始的 tap { x, y }。
可靠性
发布前,每种工具都在真实模拟器和真实项目中进行了测试,涵盖常规流程和边界情况;逐个场景的证据见 qa-results.md。以下细节有助于避免 Agent 工作流出错:
type_text会等待软键盘出现后再输入(否则,聚焦字段后立即输入会悄悄丢掉开头的几个字符)。scroll会根据屏幕尺寸计算长而慢的滑动——短而快的滑动会被某些列表忽略。long_press会按住 1000 ms,这是启动器所要求的。- 点击屏幕外的位置时,会返回实际屏幕尺寸,而不是悄无声息地无操作。
- 文本密集型屏幕(电子书 WebView 等)会限制内容量,并可通过
snapshot_ui { filter }搜索,避免上下文被大量内容占满。 - 构建/测试/设备故障会返回简短且可执行的消息,并指出下一步要调用的工具。
可选附加项
- Google 的 Android CLI 支持
screenshot { annotate: true }。doctor会输出适用于你操作系统的一行安装命令。 - ADBKeyboard IME 支持输入非 ASCII 字符的
type_text(adb 本身只支持 ASCII)。安装一次其 APK 即可;服务会自动使用它。
开发
npm install
npm test # unit tests (no real processes spawned)
npm run dev # run the server from source
npm run build # compile to dist/
许可证
MIT — 详见 LICENSE。
概念上受 XcodeBuildMCP 启发;这是围绕 Android 工具链构建的独立实现。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。