文章

Android开发者的Claude Code实战心得:需求描述、省Token与多Agent工作流

Android开发者的Claude Code实战心得:需求描述、省Token与多Agent工作流

用 Claude Code 写 Android 项目大半年了,从最初”当高级搜索引擎用”,到现在日常开发的大部分编码工作都交给它,中间踩了不少坑,也攒了一套自己的工作流。这篇文章把这些心得系统整理一下:怎么描述需求才高效、Token 怎么省、缓存命中率是怎么回事、会话什么时候该重开、Agent / SubAgent / Hook / MCP 这些概念到底是什么、有哪些常用命令和隐藏功能、以及我用过的一圈周边工具(ccswitch、headroom、rtk、codex、gemini、openclaw、trae、superpowers、scrapling、figma mcp 等)各自解决什么问题。

本文以 Claude Code(终端 CLI 形态)为主线,但大部分方法论对 Codex CLI、Gemini CLI、Trae 等同类工具同样适用。

一、先建立正确的心智模型:它是”结对的同事”,不是”补全工具”

用 AI 编程工具效率差异最大的地方,不在于订阅了哪个模型,而在于使用者把它当什么用。

  • 把它当代码补全用:你写一半它猜一半,收益有限,Copilot 就够了。
  • 把它当搜索引擎用:问一句答一句,答完上下文就浪费了。
  • 把它当结对的同事用:给它完整的任务背景、验收标准和项目约束,让它自己读代码、改代码、跑构建、看报错、再修,直到任务完成——这才是 Claude Code 这类 Agentic CLI 工具的正确打开方式。

“同事”这个比喻还有一层含义:新同事入职需要入职文档,AI 也一样。这就引出第一个关键实践。

二、CLAUDE.md:给 AI 的”入职文档”

Claude Code 每次启动会自动读取项目根目录的 CLAUDE.md。这是投入产出比最高的一件事,一次编写,长期受益。一个 Android 项目的 CLAUDE.md 建议至少包含:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# CLAUDE.md

## 项目概述
一款 IM + 协同办公 App,Kotlin + Compose + MVI,多模块组件化架构。

## 常用命令
- 构建 debug 包:./gradlew :app:assembleDebug
- 只跑某个模块的单测:./gradlew :feature-chat:testDebugUnitTest
- lint 检查:./gradlew detekt

## 模块结构
- app/            壳工程,只做组装
- feature-*/      业务模块,互相不可依赖,通过 router 通信
- core-*/         基础能力(网络、存储、日志)

## 项目约束(重要)
- 网络请求统一走 core-network 的 ApiClient,禁止在业务模块直接 new OkHttpClient
- 字符串必须放 strings.xml,禁止硬编码
- 新代码用 Kotlin,禁止新增 Java 文件
- Compose 优先,除非改动的页面本身是 XML

几个经验:

  1. 写”禁止”比写”推荐”有用。AI 默认会用最通用的写法,你项目里的特殊约定(比如自研路由、统一网络层)必须显式写成禁令,否则它会绕过你的基建自己造轮子。
  2. 常用命令一定要写。否则它每次都要花几轮工具调用去猜你的 Gradle 任务名,既浪费时间又浪费 Token。
  3. 保持精简。CLAUDE.md 每次会话都会进上下文,写成几千行的百科全书反而稀释注意力。细节文档可以拆成单独文件,在 CLAUDE.md 里用 @docs/router.md 引用,或者写清楚”路由相关规范见 docs/router.md”让它按需去读。
  4. /init 命令可以让 Claude 自己扫一遍代码库生成初版,再人工修订。

另外还有用户级的 ~/.claude/CLAUDE.md,适合放跨项目的个人偏好,比如”注释用中文”、”commit message 用约定式提交”。

三、如何描述需求:一次说清 > 反复纠偏

AI 编程有个反直觉的规律:前期多花两分钟写清需求,比后期花二十分钟纠偏便宜得多。因为每一轮纠偏都带着完整的历史上下文重新计算,又慢又贵,而且错误的中间产物会污染后续判断。

一个好的需求描述包含四要素:背景、目标、约束、验收标准。对比一下:

❌ 差的写法:

帮我加一个下载功能

✅ 好的写法:

在 feature-file 模块给文件消息加断点续传下载:

  • 入口在 FileMessageItem 的下载按钮,点击后调 FileDownloadManager(还没有,需要新建)
  • 用 OkHttp 的 Range 请求实现断点续传,下载状态用 StateFlow 暴露给 UI
  • 进度要在通知栏同步显示,参考 core-notification 里已有的 UploadNotification 的写法
  • 下载目录用 getExternalFilesDir,不要申请存储权限
  • 完成后跑一下 :feature-file:testDebugUnitTest 确认没破坏现有用例

几个具体技巧:

  1. 给参照物。”参考 XxxManager 的写法”是最省事的约束方式,AI 会先读那个文件,然后自然对齐你的代码风格、错误处理方式和依赖注入姿势。
  2. 说清楚”不要做什么”。比如”不要动数据库表结构”、”不要升级依赖版本”,能避免它顺手做出超出预期的大改动。
  3. 复杂任务先进 Plan Mode(快捷键 Shift+Tab 切换)。计划模式下它只读代码、出方案,不动手改。你确认方案没跑偏再放行执行。对于涉及五个文件以上的改动,先看计划几乎总是值得的——否决一个错误的计划是零成本的,回滚一堆错误的代码不是。
  4. 贴报错要贴全。ANR trace、崩溃堆栈、Gradle 报错,直接整段粘贴比你自己概括转述准确得多。Claude Code 支持粘贴大段文本和图片(截图 UI bug 给它看非常好用)。
  5. 一个会话干一件事。修 bug 修到一半突然想让它顺便重构,不如开新会话。混杂的目标会让它顾此失彼。

四、什么是 Agent?什么是 SubAgent(多 Agent)?

Agent

很多人对 “Agent” 这个词有距离感,其实定义很朴素:能自主循环”思考 → 调工具 → 看结果 → 再思考”直到完成目标的 AI,就是 Agent

传统 Chat 模式是”一问一答”,你是执行者,它是顾问。Agent 模式下它是执行者:你说”修掉这个崩溃”,它自己 grep 定位代码、读上下文、改代码、跑 ./gradlew test、看到测试挂了再改,全程不需要你搬运信息。Claude Code 本体就是一个 Agent,工具集包括读写文件、执行 shell 命令、搜索代码等。

SubAgent 与多 Agent

SubAgent(子代理)是 Claude Code 里非常值得掌握的进阶能力:主 Agent 可以派生出独立的子 Agent 去执行子任务,子 Agent 拥有自己独立的上下文窗口,干完活只把结论汇报回来

这解决了两个核心问题:

  1. 上下文隔离(省 Token 的大杀器)。比如”在整个项目里找出所有直接 new Handler 的地方并评估风险”,如果主 Agent 自己做,几十个文件的搜索结果会全部灌进主上下文;派 SubAgent 去做,翻文件产生的海量中间输出都留在子上下文里,主上下文只收到一份几百字的结论。
  2. 并行。多个互不依赖的子任务可以同时派多个 SubAgent 并行执行。比如组件化改造时,”梳理 feature-chat 的对外依赖”和”梳理 feature-mail 的对外依赖”就可以两个 SubAgent 同时跑。

你可以在 .claude/agents/ 目录下定义自己的子代理,每个是一个带 frontmatter 的 Markdown 文件,指定它的职责、可用工具、甚至用更便宜的模型:

1
2
3
4
5
6
7
8
9
10
11
---
name: code-reviewer
description: 代码审查专用,检查 Kotlin 空安全、协程泄漏、Compose 重组性能
tools: Read, Grep, Glob
---

你是 Android 代码审查专家,只读不写。重点检查:
1. lifecycleScope / viewModelScope 使用是否正确,有无协程泄漏
2. Compose 中不稳定参数导致的多余重组
3. 未处理的空安全问题
输出按严重程度排序的问题清单。

之后说一句”用 code-reviewer 审查这次改动”即可。我的常用组合是:主 Agent 负责写代码,一个 reviewer 子代理负责挑刺,一个 explorer 子代理负责在大代码库里找东西——写与查分离,主上下文始终保持干净。

多 Agent 的边界也要清楚:有依赖关系的任务不要并行。让两个 Agent 同时改同一个模块的文件,合并冲突会让你怀疑人生。并行只用于”读”和互不相干的”写”。

五、什么是 Hook?

Hook 是 Claude Code 提供的确定性拦截机制:在特定事件发生时(如工具调用前后、会话结束时)自动执行你配置的 shell 命令。它和”在提示词里叮嘱 AI”的本质区别是——提示词是概率性的,AI 可能忘;Hook 是 100% 执行的,由 Claude Code 框架本身保证。

配置在 settings.json 里,常用事件:

事件时机典型用途
PreToolUse工具调用前拦截危险命令、重写命令
PostToolUse工具调用后自动格式化刚改过的文件
StopClaude 完成回复时发通知、跑构建验证
SessionStart会话开始注入动态上下文

两个我在 Android 项目里实际在用的例子:

1. 每次 Claude 编辑完 Kotlin 文件自动跑 ktlint 格式化(PostToolUse 匹配 Edit/Write 工具),这样永远不用在对话里说”记得格式化”。

2. 拦截危险操作:PreToolUse 里匹配 rm -rfgit push --force 之类的命令直接拒绝。AI 犯错概率很低,但 Hook 把”很低”变成”为零”。

1
2
3
4
5
6
7
8
9
10
11
{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{
        "type": "command",
        "command": "jq -r '.tool_input.file_path' | { read f; [[ $f == *.kt ]] && ktlint -F \"$f\"; } || true"
      }]
    }]
  }
}

后面提到的 rtk 也是靠 Hook 工作的:它注册了一个 PreToolUse Hook,把 Claude 要执行的 git statusgradle build 等命令透明重写成 rtk git status,对输出做瘦身后再返回给模型。

六、省 Token:真金白银的优化

Token 就是钱(或者是订阅额度)。Android 项目天生是 Token 黑洞:Gradle 一次构建输出几千行、logcat 刷屏、代码库动辄几十万行。我的优化手段按收益排序:

1. 勤用 /clear,警惕长会话

上下文是指数级的成本:会话越长,每一轮请求携带的历史越多。一个任务做完,立刻 /clear 开始下一个。如果任务没完但上下文快满了,用 /compact 让它总结压缩历史(自动压缩也会触发,但主动压缩可以指定保留重点)。经验值:单个会话专注单个任务,超过 70% 上下文占用就该考虑收尾了。

2. rtk(Rust Token Killer):命令输出瘦身

rtk 是一个 Rust 写的 CLI 代理,原理是把 git statusgradle buildls 等命令的输出做结构化压缩——去掉装饰性字符、折叠重复内容、只保留模型真正需要的信息,官方口径能省 60~90%。配合 Hook 自动重写命令后完全无感。对 Android 开发特别有价值的场景是 Gradle 构建输出:一次失败构建原始输出可能上万 Token,瘦身后只剩报错核心部分。装完可以用 rtk gain 看累计节省了多少,很有成就感。

3. headroom:上下文压缩与按需取回

headroom 是一个 MCP 工具,思路和 rtk 互补:rtk 在命令输出进入上下文之前瘦身,headroom 则把已经在上下文里的大块内容(比如一大段调研结果、一份长文档)压缩存档,需要时再 retrieve 取回。适合长调研型会话。

4. 精确指路,别让它盲搜

“修一下登录页输入框的 bug” 会让它 grep 半天;”修一下 feature-login/src/.../LoginScreen.kt 里 PasswordField 的 bug” 直接命中。你脑子里有的信息(文件路径、类名、大概行号),说出来就是纯赚的。

5. 大搜索交给 SubAgent

前面说过了:探索类任务派子代理,中间过程不进主上下文。

6. 别把整个文件粘进对话

Claude Code 能自己读文件,而且会按需读片段。你手动粘贴整个 2000 行的文件,等于强行塞满上下文。给路径就行。

7. 模型分级

不是所有任务都需要最强模型。改个字符串、写个 data class 用 Haiku/Sonnet 级别的模型就够了,架构设计和疑难 bug 再上大杯。Claude Code 里 /model 随时切换,SubAgent 也可以在定义里固定用便宜模型。

七、看不见的账单:Prompt 缓存与命中率

省 Token 还有一个更隐蔽的维度——同样多的输入 Token,价格可以差十倍,取决于缓存命中率

什么是缓存命中率

大模型 API 是无状态的:每一轮对话,客户端都要把完整的历史(系统提示、CLAUDE.md、工具定义、之前所有消息)重新发给服务器。为了不让这些重复内容每次都全价计费,Anthropic 提供了 Prompt Caching(提示词缓存)机制:如果本次请求的前缀和上一次完全一致,命中的部分就按原价约十分之一计费,首字响应也更快;没命中的部分则要重新写入缓存(写入价格比正常输入还略贵一点)。

缓存命中率 = 命中缓存的输入 Token ÷ 总输入 Token。 Claude Code 的每一轮工具调用都是一次独立请求,而请求之间前缀基本不变,所以一个正常工作的会话命中率应该在 90% 以上。用 /cost(API 按量计费时)或 ccusage 这类统计工具可以看到 cache read 和 cache write 的比例——如果 cache write 占比异常高,说明你的使用姿势在反复击穿缓存,钱正在悄悄漏走。

如何提高缓存命中率

缓存的匹配规则是”前缀逐字一致”——前面任何一个字符变了,从那个位置往后的缓存全部失效。由此可以推出几条实践:

  1. 会话中途别动”头部”内容。CLAUDE.md、MCP 工具定义、系统提示都位于上下文最前端,会话进行到一半去改 CLAUDE.md、增删 MCP Server,整条缓存作废,下一轮全额重写。这类调整放到任务间隙、/clear 之后再做。
  2. 别频繁切换模型。缓存按模型隔离,/model 切一次,原缓存整体作废。模型分级是对的,但应该以”任务”为粒度切换,而不是一句话一切。
  3. 保持工作连续性。缓存有存活时间(TTL,通常几分钟,每次命中会自动续期)。敲两句话去开个会,回来缓存已过期,下一条消息要全额重建。长时间离开后如果是开始新任务,不如直接 /clear——前缀短,重建缓存反而便宜。
  4. 知道哪些操作必然击穿缓存/compact 重写了整个历史,缓存必然全失效(一次性成本,换来之后每轮都更便宜,通常值得);双击 Esc 回退重新编辑历史消息,从那一点起的缓存失效(也通常值得,因为砍掉了被污染的上下文)。关键是有意识地做——清楚代价、确认收益大于代价,而不是无意识地反复触发。

一句话总结:上下文只向后追加、头部保持稳定,命中率自然就高。

八、会话管理:什么时候续用,什么时候重开

/clear 在省 Token 一节已经出现过,这里把判断标准展开说清楚。

继续用当前会话,当:

  • 还在同一个任务的迭代循环里(实现 → 审查 → 修复),前文的探索成果正在持续发挥作用;
  • 下一步强依赖刚建立的上下文——比如刚让它分析完某模块的架构,接下来就要基于这份分析动手改;
  • 上下文占用还健康(我个人的警戒线是 60%)。

果断新开会话,当:

  • 任务已完成,下一个任务和当前上下文无关——旧上下文不但按轮收钱,还会干扰新任务的判断;
  • 上下文被污染:AI 连续走了几次弯路、贴进过大段无关日志、纠偏两三次仍不见效。错误的历史会持续把模型往错误方向拖,这时”重开 + 第一条消息把约束一次性写清楚”几乎总是比”第四次纠偏”效果好;
  • 上下文快满、即将触发自动压缩。自动压缩是有损的,关键约束可能在压缩中丢失,与其被动压缩不如主动收尾。

任务没做完但必须换会话怎么办?两个办法:

  1. /compact 保留方案结论和待办清单——带指令的主动压缩,比自动压缩可控;
  2. 更推荐接力文档(handoff)模式:让它把当前进展、关键决策、剩余待办写进一个 markdown 文件(”把目前的方案和待办写到 docs/refactor-progress.md”),新会话第一句让它读这个文件接着干。文件是无损的、可以人工审阅修订的,比压缩可靠,还顺便留下了文档。

另外两个相关命令:claude -c(continue)直接恢复最近一次会话,claude -r(resume)从历史会话列表里挑一个恢复——昨天没干完的活今天接着干,不需要靠复制粘贴找回上下文。

九、常用命令与快捷键速查

斜杠命令(会话内输入 / 可以看到全量列表):

命令作用
/clear清空上下文,开始新任务
/compact [指令]压缩历史,可附加”要保留什么”的指令
/model切换模型
/cost · /usage查看本会话花费 / 订阅额度用量
/init扫描代码库生成 CLAUDE.md 初稿
/memory编辑记忆文件(CLAUDE.md 等)
/permissions管理工具权限白名单
/mcp查看和管理 MCP Server
/agents创建和管理 SubAgent
/hooks交互式配置 Hook
/rewind回退到某个检查点(代码和对话一起回退)
/resume切换到历史会话
/export导出当前对话
/doctor诊断安装和配置问题
/statusline自定义底部状态栏

输入技巧和快捷键:

操作作用
Shift+Tab循环切换 普通 / 自动接受编辑 / Plan Mode
Esc随时打断正在执行的 Claude
双击 Esc跳回历史某条消息重新编辑(配合 /rewind 撤销代码)
@引用文件/目录,支持 Tab 补全,”精确指路”必备
! 开头直接执行 shell 命令,输出进入上下文
# 开头把这句话快速存为记忆(写进 CLAUDE.md)
Ctrl+R展开查看被折叠的完整输出
直接粘贴图片把 UI bug 截图、设计稿直接喂给它

命令行参数:

1
2
3
4
claude -c                # 恢复最近一次会话
claude -r                # 从列表选择恢复历史会话
claude -p "..."          # 无头模式:不进交互界面,跑完输出结果就退出,适合脚本和 CI
claude mcp add <name> …  # 添加 MCP Server

几个容易被忽略的好功能

  1. 检查点与 /rewind:Claude Code 在每次改动前会自动存档,改崩了可以把代码和对话一起回退到任意检查点。有了它,”放手让 AI 大改”的心理成本低了很多。
  2. 扩展思考:在提示词里加 “think” / “think hard” / “ultrathink”,可以逐级提升推理深度。疑难 bug 和架构设计时用,简单任务别用——又慢又贵。
  3. # 快速记忆:发现它犯了一个项目相关的错,纠正之后马上补一句 # 本项目日志必须用 Timber,禁止直接用 Log,一句话沉淀进 CLAUDE.md,之后的会话自动生效。这是让 CLAUDE.md 保持”活文档”状态的最低成本方式。
  4. 无头模式 + CIclaude -p 可以嵌进脚本,比如在 GitHub Actions 里对每个 PR 自动跑一轮代码审查,或者批量清理 lint 报告。
  5. git worktree 多开:用 git worktree 给同一个仓库检出多个工作副本,每个副本跑一个 Claude Code 实例,互不干扰地并行推进多个任务——重度用户的常规操作。
  6. 权限白名单:在 /permissions 里把 ./gradlew testadb logcat 这类安全高频命令加白,减少确认打断;危险命令则交给 Hook 兜底拦截,两头都省心。

十、MCP:给 AI 装”外设”

MCP(Model Context Protocol)是 Anthropic 推的开放协议,可以理解为 AI 的 USB 接口:任何实现了 MCP 的服务都能把自己的能力(工具、数据)插给 Claude 用。Claude Code 里用 claude mcp add 接入。我实际在用的几个:

Figma MCP:设计稿直出 Compose

对 Android 开发冲击最大的一个。接入后 Claude 能直接读取 Figma 设计稿的图层结构、间距、颜色、字体,你丢一个 Figma 链接说”按这个实现 Compose 布局”,它产出的还原度远高于”看截图猜尺寸”。心得两条:

  • 设计稿本身规范(用了 Auto Layout、颜色变量)时效果最好,垃圾进垃圾出;
  • 让它同时对照你项目的 DesignSystem 模块(”颜色用 AppTheme 里的语义色,别硬编码 hex”),否则会生成一堆魔法数字。

Scrapling Server MCP:网页抓取

给 Claude 增加”稳定抓网页”的能力(带反爬对抗、会话保持、截图)。我主要用它抓第三方 SDK 的接入文档——很多国内 SDK 文档没有干净的 API 可查,让它直接抓文档页再照着写接入代码,比自己复述文档给它省事得多。

Context7 MCP:查最新库文档

模型训练数据有截止时间,而 Android 生态的库更新飞快(Compose、Media3、Room 的 API 一年能变好几轮)。Context7 提供各大开源库的最新文档检索,问”Media3 最新版怎么配置缓存”这类问题时,让它先查再答,能显著减少”一本正经地用两年前的废弃 API”。

MCP 的注意事项:每个 MCP Server 的工具定义本身也占上下文,装十几个 MCP 等于每次会话先交一笔”入场税”。按项目需要启用,不用的删掉。

十一、Skills 与自定义命令:把重复流程固化下来

如果说 Hook 是”自动触发的脚本”,Skill(技能 / 自定义斜杠命令)就是”手动触发的标准作业流程(SOP)”。在 .claude/commands/.claude/skills/ 下放一个 Markdown 文件,就多了一条自定义命令。比如我给博客项目和 Android 项目分别配了:

1
2
3
4
5
6
<!-- .claude/commands/newpage.md -->
按项目规范新建一个页面,$ARGUMENTS 是页面名称:
1. 在对应 feature 模块创建 XxxScreen.kt(Compose)+ XxxViewModel.kt(MVI 模式)
2. ViewModel 参考 ChatViewModel 的 Intent/State/Effect 结构
3. 在 router 模块注册路由
4. 补一个 ViewModel 的单元测试骨架

之后 /newpage 订单详情 一句话完成脚手架。判断标准很简单:同样的指令你对 AI 说过三次,就该固化成 Skill。

社区的 superpowers 插件是这个思路的集大成者:一套现成的技能库,涵盖头脑风暴、TDD 工作流、系统性调试等,还包含”先写测试再写实现、每步验证”这类强制工作流。可以直接装,更推荐读它的技能源码——它教会你的”如何组织 Skill”比技能本身更值钱。

顺带一提 petdex:一个纯娱乐的 Skill,在终端里养一只桌面宠物。没有任何生产力价值,但写代码写累了看一眼还挺解压的,也算展示了 Skill 机制的可玩性。

十二、周边工具链:我都用过什么

ccswitch:多供应商/多配置切换

Claude Code 的 API 端点和 Key 是可配置的,很多人会同时有官方订阅、中转站、公司内部网关等多套配置。ccswitch 就是干这个的:一条命令在多套 Provider 配置之间切换,不用手动改环境变量。对国内开发者尤其实用——某个通道抽风时秒切备用通道,工作不中断。

Codex CLI 与 Gemini CLI:备胎还是主力?

这两个分别是 OpenAI 和 Google 的同形态竞品,我都长期装着:

  • Codex CLI:干活风格偏”闷头执行”,改动激进,跑长任务(大重构、批量迁移)时表现不错。
  • Gemini CLI:超长上下文是招牌,免费额度慷慨,让它一次性通读整个中型项目做分析很合适;日常编码的工程细节(能不能编译过、遵不遵守项目约定)个人感受弱于 Claude Code。

我的用法是主力 + 交叉验证:日常开发用 Claude Code;遇到疑难 bug 或方案纠结时,把同一个问题丢给 Codex/Gemini 各跑一遍,三个模型的答案互相印证。AI 有个特点是”错得很自信”,多模型交叉是目前最便宜的纠错手段。

Trae:AI IDE 路线

字节的 AI IDE(VS Code 系)。和 CLI 路线的区别在于交互形态:改动 diff 可视化、上下文选取靠点选,对不习惯终端的同学更友好。我的感受是:写前端和轻量项目时 IDE 形态很舒服;写 Android 时反而 CLI 更好用——因为 Android 的主 IDE 是 Android Studio,与其换编辑器,不如让 Claude Code 在终端里跑,AS 只负责看代码和调试,两者互不打架。

OpenClaw:把 Agent 装进 IM

开源的个人 AI 助手网关,能把 Agent 接到微信、Telegram 等聊天渠道,跑在自己的服务器上。和开发的结合点:出门在外时在手机上给它发一句”把 CI 上挂掉的那个测试修了”,它在服务器上调 Claude Code 干活,干完回消息。属于”不是必需、但体验过就回不去”的类别。折腾成本不低,注意跑在受控环境里并管好权限——一个能执行 shell 命令的 Agent 暴露在 IM 里,安全边界必须想清楚。

小结一张表

工具解决什么问题
Claude Code主力编码 Agent
ccswitch多 API 配置一键切换
rtk命令输出瘦身,省 Token
headroom上下文压缩与按需取回
Codex CLI / Gemini CLI交叉验证、备用通道
TraeIDE 形态的 AI 编程
OpenClawIM 里远程指挥 Agent
superpowers现成的高质量 Skill 库
Figma MCP设计稿转 Compose
Scrapling MCP抓取文档/网页
Context7 MCP查询库的最新文档
petdex摸鱼

十三、Android 场景的具体经验

  1. 构建报错直接甩给它。Gradle 的报错信息又长又绕(尤其是依赖冲突和 KSP 报错),Claude 解析这类输出的能力远超人眼扫描。配合 rtk 瘦身后成本也不高。
  2. 让它用 adb 自查。Claude Code 能执行 shell,也就能执行 adb。”装到设备上,启动 App,把崩溃的 logcat 抓下来自己分析”是完全可行的指令,形成”改代码 → 装包 → 看日志 → 再改”的闭环。
  3. ANR / 崩溃分析。把 trace 文件路径给它,让它结合源码定位。对 data/anr/traces.txt 这种大文件,让它先 grep 关键线程再细读,别整个读进来。
  4. XML 转 Compose 迁移是它的强项:机械但需要细心的工作,正好是 AI 的甜点区。给一个迁移范例(参照物!),然后批量派活。
  5. 单元测试让它包办。写测试是 AI 目前最成熟的能力之一。我的规矩是:AI 写的业务代码,必须配 AI 写的测试,然后我只认真审测试用例——用例对了,实现大概率跑不偏。
  6. 它不擅长的要心里有数:复杂的自定义 View 触摸事件、多线程时序 bug、需要真机手感的动画调优,这些强依赖运行时反馈的领域,AI 只能辅助分析,别指望一把梭。

十四、总结:几条最重要的心得

  1. CLAUDE.md 是回报率最高的投资,把项目约束写成禁令。
  2. 需求描述四要素:背景、目标、约束、验收标准;给参照物;复杂任务先 Plan 后执行。
  3. Token 优化三板斧:勤 /clear、rtk 瘦身命令输出、探索任务派 SubAgent。
  4. 缓存命中率的关键是前缀稳定:会话中途别动 CLAUDE.md、MCP 和模型;上下文被带歪就果断重开,跨会话用接力文档传递进度。
  5. 概率性的事交给提示词,确定性的事交给 Hook
  6. 重复三次的指令固化成 Skill,外部能力用 MCP 接入
  7. 信任但要验证:AI 写的代码必须过构建、过测试、过你的 review。它是效率倍增器,不是责任转移器——merge 进 master 的每一行,署名的还是你。

工具会一直换代(这篇文章里的工具清单大概半年后就会过时),但”给足上下文、管好上下文、验证产出”这三件事,应该会在相当长的时间里持续有效。

本文由作者按照 CC BY 4.0 进行授权