Android 开发者对 Gradle 构建慢、命令行输出难解析、工具链碎片化这些痛点并不陌生。对人类工程师来说,忍一忍还能手动排查;但对 AI Agent 而言,一条输出格式不稳定的命令就可能让整个自动化流程卡死。Google 最近推出的全新 Android CLI 和配套的"结构化技能"体系,本质上是在做一件事——把 Android 工具链从"人勉强能用"升级为"Agent 天然适配"。官方宣称,借助 Agent 驱动的工作流,构建速度最高可提升 3 倍。
为什么旧工具链对 Agent 不友好
传统 Android 开发命令(adb、gradlew、avdmanager 等)有几个典型问题:
- 输出格式自由散漫:日志混着警告、错误、进度条,人类靠经验过滤,Agent 靾于结构化解析。
- 命令语义模糊:同一个
gradlew assembleDebug,在不同项目配置下行为差异巨大,Agent 缺乏上下文就容易误判。 - 缺乏原子化操作:构建、部署、测试往往耦合在一起,Agent 想只跑其中一步需要大量 hack。
这些问题在人类手动操作时可以靠"看一眼就知道"来弥补,Agent 却必须依赖明确的输入输出契约。Google 这次的重设计,正是围绕这个契约展开。
新 CLI:结构化输出与原子化命令
新 Android CLI 的核心变化有两点:
一是输出结构化。命令返回 JSON 或其他机器可解析格式,而非自由文本。Agent 可以直接用 jq 或内置 JSON 解析提取所需字段,不再需要正则 hack。
二是命令原子化。构建、安装、启动、测试拆成独立步骤,每一步都有明确的输入参数和输出状态。Agent 可以编排这些原子命令,像拼积木一样组合出完整工作流,而不是被一个巨型命令的副作用绑架。
结构化技能与知识库
Google 同时引入了"技能"(Skills)概念。每个 Skill 是一个封装好的、可被 Agent 直接调用的操作单元——比如"创建新模块"、"配置 ProGuard"、"运行 instrumentation 测试"。Skill 自带:
- 参数 schema(Agent 知道该传什么)
- 执行步骤描述(Agent 知道会发生什么)
- 预期输出格式(Agent 知道怎么解读结果)
配合内置知识库,Skill 还能提供项目上下文:当前 minSdk 版本、依赖列表、模块结构等。这意味着 Agent 不再需要先花大量轮次"探索项目",而是直接带着上下文进入执行阶段。
第三方 Agent 兼容:不只是 Gemini
一个值得注意的设计决策:这套工具并非 Gemini 专属。Google 明确表示兼容 Claude Code、Codex 等第三方 Agent。这背后的逻辑很务实——开发者团队可能已经在用 Claude Code 做 code review,用 Codex 做 PR 生成,强行绑定 Gemini 反而会制造摩擦。
兼容的实现方式是 CLI 层面的:任何能执行 shell 命令、解析 JSON 输出的 Agent,都可以直接调用新 CLI 的 Skill。不需要特定 SDK 或 API key。
实践:用 Claude Code 驱动 Android CLI 工作流
以下示例展示如何让 Claude Code(或任何支持 shell 执行的 Agent)通过新 Android CLI 完成一次"构建→部署→测试"的完整流程。命令基于新 CLI 的设计理念推演,具体参数名以官方发布文档为准,运行前请确认你已安装新版 Android CLI。
# 1. 查询项目上下文——Agent 先了解当前项目状态
android cli project info --format json
# 预期输出示例(结构化):
# {
# "moduleName": "app",
# "minSdk": 24,
# "targetSdk": 34,
# "dependencies": ["com.squareup.okhttp3:okhttp:4.12.0", ...],
# "buildVariants": ["debug", "release"]
# }
# 2. 执行构建 Skill——只构建 debug 变体
android cli skill build \
--variant debug \
--format json
# 预期输出:
# {
# "status": "success",
# "apkPath": "app/build/outputs/apk/debug/app-debug.apk",
# "durationMs": 12400,
# "warnings": []
# }
# 3. 部署到连接的设备
android cli skill install \
--apk app/build/outputs/apk/debug/app-debug.apk \
--device serial:ABC123 \
--format json
# 4. 运行 instrumentation 测试
android cli skill test \
--type instrumentation \
--module app \
--variant debug \
--format json
# 预期输出:
# {
# "status": "completed",
# "totalTests": 42,
# "passed": 40,
# "failed": 2,
# "failures": [
# { "className": "LoginActivityTest", "methodName": "testInvalidCredentials", "message": "Expected status 401, got 200" }
# ]
# }
在 Claude Code 中,你可以把上述流程封装成一个 Agent prompt:
## Android 构建与测试流程
请按以下步骤执行,每一步必须检查 JSON 输出的 status 字段:
1. 运行 `android cli project info --format json`,确认 minSdk 和 buildVariants。
2. 运行 `android cli skill build --variant debug --format json`,如果 status 不是 success,分析 warnings 并修复。
3. 运行 `android cli skill install --apk <上一步输出的apkPath> --format json`。
4. 运行 `android cli skill test --type instrumentation --module app --variant debug --format json`,如果有 failed 测试,输出失败详情并建议修复方向。
遇到错误时不要盲目重试,先分析 JSON 输出中的错误信息,再决定下一步操作。
这个 prompt 的关键设计点:要求 Agent 在每一步检查结构化输出,而非依赖日志猜测。这正是新 CLI 体系的价值所在——Agent 有了可靠的反馈闭环。
如果你想自己编排:最小自动化脚本
不依赖特定 Agent,纯 shell 脚本也能利用新 CLI 的结构化输出做自动化:
#!/usr/bin/env bash
set -euo pipefail
# 构建并提取 APK 路径
BUILD_OUTPUT=$(android cli skill build --variant debug --format json)
STATUS=$(echo "$BUILD_OUTPUT" | jq -r '.status')
if [[ "$STATUS" != "success" ]]; then
echo "构建失败,详情:"
echo "$BUILD_OUTPUT" | jq '.warnings'
exit 1
fi
APK_PATH=$(echo "$BUILD_OUTPUT" | jq -r '.apkPath')
# 安装
INSTALL_OUTPUT=$(android cli skill install --apk "$APK_PATH" --format json)
echo "$INSTALL_OUTPUT" | jq '.status'
# 测试并报告
TEST_OUTPUT=$(android cli skill test --type instrumentation --module app --variant debug --format json)
FAILED=$(echo "$TEST_OUTPUT" | jq '.failed')
if [[ "$FAILED" -gt 0 ]]; then
echo "⚠️ 有 $FAILED 个测试失败:"
echo "$TEST_OUTPUT" | jq '.failures'
exit 1
else
echo "✅ 全部测试通过"
fi
把这段脚本放进 CI(GitHub Actions、GitLab CI 等),每一步的输出都是可解析的 JSON,后续报告生成、失败通知都可以精确提取字段,不再需要 grep 日志里的模糊关键词。
采纳建议与边界
什么时候值得切换:
- 团队已经在用 AI Agent 辅助开发(Claude Code、Codex 等),新 CLI 能立刻减少 Agent 的"探索轮次",提升有效执行比例。
- CI 流程中大量依赖 Gradle 输出解析,迁移到结构化 JSON 后维护成本显著降低。
- 项目模块多、构建配置复杂,Agent 需要频繁查询项目上下文。
当前需要注意的边界:
- 新 CLI 尚在早期阶段,具体命令参数和 Skill 定义可能随版本迭代调整,生产环境采用前务必锁定版本并验证输出稳定性。
- "3 倍构建速度提升"是 Agent 驱动工作流下的整体效率提升,并非单次
gradlew assembleDebug的编译速度变快——底层编译器没换,提速来自 Agent 减少了试错和等待时间。 - 第三方 Agent 兼容是 CLI 层面的,深度集成(比如 Agent 直接调用 Skill schema 自动生成参数)仍需各 Agent 厂商适配,目前 Claude Code 和 Codex 的支持程度需看各自更新节奏。
迁移检查清单:
- 确认新版 Android CLI 已安装,旧命令仍可并行使用,不必一次性全切。
- 挑一个最痛的流程(比如"构建→部署→跑测试→收集结果")先用新 CLI 脚本化,验证 JSON 输出的可靠性。
- 如果用 Agent,先写好结构化 prompt(参考上面的 Claude Code 示例),让 Agent 逐步执行而非一次性长命令。
- CI 中逐步替换
grep/sed日志解析为jqJSON 解析,减少脆弱的正则依赖。
Google 这次的方向很清晰:工具链不再是"人用着凑合,Agent 碰运气",而是把 Agent 当作一等公民来设计。对已经在 Agent 辅助开发上投入的团队来说,这是值得跟进的基础设施升级。