Android Skills MCP:把官方 Android 技能分发给所有 AI 编程助手
Google 官方维护了一套 Android 开发"技能"库(android/skills),每个技能是一份 SKILL.md 最佳实践指南,例如 edge-to-edge 沉浸式布局、R8 优化分析等。但要用进 AI 编程工具,开发者得手动复制粘贴,而且 Claude、Cursor、Copilot 各家的 rules 格式还不一样——同一份技能要改写成 7 种形态。skydoves(Jaewoong Eum)的 android-skills-mcp 正是解决这个分发难题:它包装 android/skills,提供两种方式让 AI 工具用上这些技能——MCP 服务器(按需拉取)和打包 CLI(一键转成 7 种工具的原生 rules 文件)。本文剖析它的架构、核心包与使用方式。参考 GitHub 仓库。
1、概述:它解决什么问题
先看它要填的坑。Google 的 android/skills 是好东西,但从"官方仓库"到"AI 工具真正用上"之间缺一个分发层:
官方 android/skills (SKILL.md 最佳实践,如 edge-to-edge / R8-analyzer)
|
| 手动复制粘贴?格式各家不同,要改写 7 遍?
v
Claude Code .claude/skills/<name>/SKILL.md
Cursor .cursor/rules/<name>.mdc
Copilot .github/instructions/<name>.instructions.md
Gemini .gemini/styleguide.md
Junie/Continue/Aider ... 各家一种格式android-skills-mcp 把这层"适配与分发"自动化了。它是一个 pnpm workspace monorepo,对外提供两个产品:MCP 服务器(动态按需拉取技能)和打包 CLI(静态转成各工具原生 rules 文件),两者共享一个解析内核与内置的技能快照,全程离线可用(npx 即跑)。
核心要点:
1. 包装 Google 官方 android/skills,免复制粘贴即可被 AI 工具使用
2. 两种分发范式:MCP 服务器(动态)与rules 文件(静态)
3. 内置技能快照,离线工作,npx -y 即可运行,无需 clone 上游
4. 覆盖 Claude Code / Cursor / Copilot / Gemini / Junie / Continue / Aider 七大工具
2、整体架构:三个包的分工
仓库是 pnpm workspace,三个包各司其职,共享同一个内核与技能快照:
android-skills-mcp (pnpm workspace monorepo)
├── packages/core @android-skills/core 解析 + 校验 + BM25 索引(共享内核)
├── packages/mcp android-skills-mcp MCP 服务器(stdio,按需拉取)
└── packages/pack android-skills-pack 打包 CLI(转 7 种 rules 文件)
↑ 三者共享 core,且 mcp/pack 都内置 dist/skills.json 技能快照核心要点:
1. @android-skills/core:解析 SKILL.md、按规范校验、建搜索索引,是共享底座
2. android-skills-mcp:MCP 服务器,把技能库暴露给任何 MCP 客户端
3. android-skills-pack:CLI,把 SKILL.md 转成各工具原生格式写入项目
4. mcp 和 pack 都依赖 core,且都把解析后的技能快照打包进 dist/skills.json,终端用户无需上游仓库
3、内核:@android-skills/core
core 是整个项目的底座,三件事:解析 frontmatter、按规范校验、建全文索引。它决定了技能能否被"结构化理解 + 高效检索"。
// @android-skills/core 的三大职责
1. 解析:用 gray-matter 解析 SKILL.md 的 frontmatter(name/description 等元数据)
2. 校验:用 zod 按 agentskills.io 规范校验每个技能的合法性
3. 索引:用 minisearch 构建 BM25 索引,支持 search_skills 全文检索
// 关键产出:dist/skills.json(解析后的技能快照)
// 被 mcp 和 pack 共同内置,让终端用户离线即用,不依赖上游 android/skills 仓库核心要点:
1. gray-matter 解析 SKILL.md 头部的 YAML frontmatter,提取技能元数据
2. zod + agentskills.io 规范校验,保证技能符合 AI 技能标准格式
3. minissearch 构建 BM25 索引,让 search_skills 能按相关性排序,而非简单列表
4. 解析结果固化为 dist/skills.json 快照,是"离线 + 快速加载"的基础
4、MCP 服务器:按需拉取技能
android-skills-mcp 是一个 stdio MCP 服务器,暴露三个工具和一个资源协议,任何 MCP 客户端都能发现并按需拉取技能:
// 暴露的三个工具
list_skills // 列出所有可用技能
search_skills // 按关键词 BM25 搜索(如 "edge-to-edge")
get_skill // 取回某个技能的完整内容
// 资源协议
每个技能暴露为 skill:// 资源,MCP 客户端可按需发现并拉取
// 接入 Claude Code(一行命令)
claude mcp add android-skills -- npx -y android-skills-mcp
// 接入 Cursor:.cursor/mcp.json
{
"mcpServers": {
"android-skills": {
"command": "npx",
"args": ["-y", "android-skills-mcp"]
}
}
}
// 其他 MCP 客户端(Codex CLI / Windsurf 等):任何能注册 stdio MCP 的地方
// npx -y android-skills-mcp
// 内置快照加载 < 200ms,每次会话拉起的开销可忽略核心要点:
1. 三个工具:list_skills 列举、search_skills 搜索、get_skill 取详情
2. 每个技能作为 skill:// 资源暴露,符合 MCP 资源协议
3. Claude Code 一行 `claude mcp add` 即接入;Cursor 改 mcp.json
4. 快照加载 < 200ms,按需拉取、不污染仓库
5、打包 CLI:转 7 种原生 rules 格式
如果你更倾向"把 rules 文件提交进仓库、团队共享",打包 CLI 能把 SKILL.md 一键转成各工具的原生格式写入项目,可选单个目标或 all:
# 转成某个工具的格式
npx android-skills-pack install --target cursor
npx android-skills-pack install --target claude-code
npx android-skills-pack install --target copilot
# 一次转成全部 7 种
npx android-skills-pack install --target all
# 只装某个技能(可逗号分隔多个)
npx android-skills-pack install --target cursor --skill edge-to-edge
npx android-skills-pack install --target claude-code --skill edge-to-edge,r8-analyzerTarget 输出路径 说明
-----------------------------------------------------------------------------
claude-code .claude/skills/<name>/SKILL.md 近 1:1 拷贝,引用单独存
cursor .cursor/rules/<name>.mdc description + alwaysApply
copilot .github/instructions/<name>.instructions.md applyTo: "**"
gemini .gemini/styleguide.md 单文件拼接,## 分节
junie .junie/skills/<name>/SKILL.md 原生支持 agentskills.io
continue .continue/rules/<name>.md name/description/alwaysApply
aider CONVENTIONS.md (仓库根) 单文件,.aider.conf.yml 加 read核心要点:
1. --target 选单工具或 all;--skill 过滤特定技能
2. 七大工具各有专属输出路径与 frontmatter 约定,CLI 自动适配
3. 文件写入项目后可提交仓库,团队成员无需各自配置
4. junie 原生支持 agentskills.io 规范,其余工具按各自 rules 机制转写
6、两种方式怎么选
MCP 服务器和打包 CLI 不是二选一的对立,而是两种范式的权衡——动态按需 vs 静态提交:
维度 MCP 服务器 打包 CLI(rules 文件)
------------------------------------------------------------------------
形态 运行时按需拉取 静态文件写入项目
仓库 不污染仓库 可提交,团队共享
更新 上游更新后自动跟进(快照随包) 需重新跑 CLI 同步
离线 npx 即跑(内置快照) 文件已在本地,完全离线
可见性 技能"隐式"生效 rules 文件可读可审查
适合 个人快速启用、多项目复用 团队统一规范、需要版本化核心要点:
1. MCP 方式:一次配置、多项目复用,技能"隐式"生效,不污染仓库
2. 文件方式:rules 提交进仓库,团队共享、可审查、可版本化
3. 个人开发优先 MCP(轻),团队协作优先文件(稳)
4. 两者共享同一份技能快照,内容一致,只是分发路径不同
7、设计亮点与启示
抛开功能,这个项目在工程上有不少值得借鉴的设计:
- 快照解耦上游:把解析后的技能固化进 dist/skills.json,终端用户完全不依赖 android/skills 仓库
- BM25 而非列表:用 minisearch 建全文索引,search_skills 按相关性排序,体验远超扁平 list
- 遵循 agentskills.io 规范:用 zod 校验,技能格式标准化,可被任何符合规范的工具消费
- monorepo 拓扑构建:core 先、mcp/pack 并行,pnpm workspace + vitest 共 64 个测试
- 双范式覆盖:MCP(动态)+ 文件(静态)满足不同场景,不一刀切
核心要点:
1. 把"技能数据"与"上游仓库"解耦(快照内置),是离线分发的关键设计
2. 用搜索(BM25)替代列表,让 AI 能"找到最相关的技能"
3. 遵循开放规范(agentskills.io),不绑架用户于单一工具
4. 它的启示:做"AI 工具的内容分发",要把"数据层(core)"与"传输层(MCP/文件)"分离
8、总结
android-skills-mcp 抓住了一个具体而真实的缺口:Google 有官方 Android 技能,各家 AI 工具有各自的 rules 格式,中间缺一个"适配 + 分发"层。它用"MCP 服务器 + 打包 CLI"双范式填上了这个空。
关键要点:
- 定位:包装 Google android/skills,分发给所有主流 AI 编程助手
- 架构:core(解析/校验/BM25)+ mcp(服务器)+ pack(CLI)三包 monorepo
- MCP:list/search/get 三工具 + skill:// 资源,Claude Code 一行接入
- CLI:--target 选 7 种工具格式,--skill 过滤,写入项目可提交
- 选型:个人用 MCP(轻、按需),团队用文件(稳、可版本化)
- 亮点:快照内置离线、BM25 搜索、agentskills.io 规范、数据层与传输层分离
对于想让 AI 编程助手"懂 Android 最佳实践"的开发者而言,android-skills-mcp 把"官方技能 → AI 工具"的分发链路打通了——edge-to-edge、R8 优化这些官方沉淀的经验,不再是"知道但用不上"的文档,而是 AI 写代码时随时可调用的能力。它更示范了一种通用模式:把任何"最佳实践库"通过 MCP / rules 文件分发给 AI 工具,数据层(解析与索引)与传输层(MCP/文件)分离。这套"技能分发"思路,未来完全可以复用到前端、后端、安全等任何领域的实践库上。


