状态:已落地;调研与首版技能集快照:2026-10-22。
目标:在这台机器上装一次,所有 Android 项目都能用同一套经过筛选的 Android 开发技能;上游变化可以自动检查、以 PR 形式审阅,而不是每个项目 各复制一份、各自过期。
Agent Skills 是「给 AI 编码智能体看的操作手册」:一个目录里放 SKILL.md,
agent 启动时只加载 name / description,命中任务时才读正文和 references/。
格式是开放的,见 agentskills.io。
问题在于技能放哪儿、谁来更新。如果每个 Android 项目都往自己的
.agents/skills/ 里抄一份,就会出现:
- 同一个技能在不同项目里版本不同,修好的坑在新项目里又出现;
- 上游更新了 API / 最佳实践,没人知道;
- 技能目录里混进项目私有的设备地址、脚本和约定,没法复用。
所以这里采用和 EasyApple 相同的思路: 仓库集中维护 → 安装到用户级共享目录 → 所有项目复用。区别是 Android 这边官方已经有一个高质量技能库,我们不需要从零写。
不是按 star 数直接收,而是同时看五件事:
- 来源可信:优先 Google / Android 官方组织,其次是长期维护的社区库;
- 许可明确:必须能合法复制和再分发(Apache-2.0 / MIT);
- 仍在维护:2026 年有提交,不是归档项目;
- 不重复:同一主题优先官方技能,社区技能只补官方明确不覆盖的部分;
- 可独立安装:符合 Agent Skills 格式(有
SKILL.md+ frontmatter), 不依赖某个特定 IDE 或私有运行时。
star 数只是「社区认可度」的信号,不是质量证明。下表是 2026-10-22 的快照, 以后会变;复核命令在文末。
| 候选 | 认可度信号(2026-10-22) | 许可 | 结论 |
|---|---|---|---|
| android/skills | Google / Android 官方;9.1k star;33 个技能;2026-10-21 仍在更新 | Apache-2.0 | ✅ 全量收录,作为官方层 |
| new-silvermoon/awesome-android-agent-skills | 984 star;17 个技能;2026-07 更新 | Apache-2.0 | ✅ 收录 13 个,补架构 / 协程 / 网络 / Gradle / 无障碍 |
| Kotlin/kotlin-agent-skills | Kotlin 官方组织;1.1k star;2026-10 更新 | Apache-2.0 | ❌ 不收录:偏 Kotlin 工具链迁移,和本仓库锁定的 AGP/Kotlin 组合冲突;AGP 升级已由官方 agp-9-upgrade 覆盖 |
| skydoves/compose-performance-skills | 517 star;25 个 Compose 性能技能;2026-06 更新 | Apache-2.0 | ❌ 不收录:与官方 jetpack-compose-performance 重叠;需要更深的 Compose 性能时可单独装 |
| aldefy/compose-skill | 597 star;单技能 3.7 MB | MIT(GitHub 标 NOASSERTION) | ❌ 不收录:体量大且与官方 Compose 技能重叠 |
| dpconde/claude-android-skill | 346 star;2025-12 更新 | MIT | ❌ 不收录:架构内容与已收录的 3 个 awesome 架构技能重叠 |
| SimoneAvogadro/android-reverse-engineering-skill | 8.2k star | Apache-2.0 | ❌ 不收录:逆向工程不在本仓库「开发实践」的范围 |
| google/skills | Google 官方通用技能库;21k star | 见仓库 | ➖ 只作为交叉参考:Android 专用技能以 android/skills 为准 |
android/skills 的 33 个技能覆盖了官方认为「LLM 容易做不好」的领域:AGP 9 升级、
CameraX、Media3 Cast、Navigation 3、边缘到边缘、权限 / Intent 安全、R8、
ANR、Profiler、Compose 性能、TV / Wear / XR / Auto、端侧 AI、Play 等。
它们本身就是按任务拆分的,不是一份大文档,适合直接作为集合维护。
社区层只补官方明确不覆盖的日常工程能力。awesome-android-agent-skills
有 17 个技能,我们排除了 4 个与官方重叠的:
| 排除的社区技能 | 被谁覆盖 |
|---|---|
android-testing |
官方 testing-setup |
compose-performance-audit |
官方 jetpack-compose-performance |
navigation3(目录名 compose-navigation) |
官方 navigation-3 |
xml-to-compose-migration |
官方 migrate-xml-views-to-jetpack-compose |
最终:33 个官方 + 13 个社区 + 1 个本仓库维护 = 47 个技能。
本仓库维护的是 android-device-ops,
它绑定 tools/ 里的真机脚本,不属于通用集合,所以单独放在 localSkills 里。
.agents/
├── skills.config.json # 唯一配置:sources / profiles / agents / localSkills
├── skills-sources.lock.json # 生成文件:每个上游技能对应的 repository + commit
└── skills/
├── android-device-ops/ # 本仓库维护(localSkills)
├── android-cli/ # 上游复制(android/skills)
├── android-architecture/ # 上游复制(awesome-android)
└── ...
规则:
skills.config.json是唯一入口。 要加/减上游技能,改sources的include/exclude,然后跑更新脚本;不要手工往.agents/skills/里拷。skills-sources.lock.json是生成文件。 它记录每个技能的来源仓库、 相对路径、许可证和 commit,用来回答「这个技能是从哪一版来的」。- 上游技能目录不要手改。 下一次更新会覆盖。项目特定的内容写到
localSkills里的本地技能目录。 - 每个上游技能目录都带一份
LICENSE/LICENSE.txt,复制时一并保留。
# 默认:profile=core -> ~/.agents/skills
bash tools/install-agent-skills.sh
# 换集合
bash tools/install-agent-skills.sh --profile tv
bash tools/install-agent-skills.sh --profile easyandroid
# 看有哪些集合 / 每个集合多少个技能
bash tools/install-agent-skills.sh --list
# 只检查,不写文件(适合收尾 / CI)
bash tools/install-agent-skills.sh --check
# 移除本脚本创建的链接或副本(不会碰别人装的同名技能)
bash tools/install-agent-skills.sh --profile core --uninstall同名技能已存在且不是本脚本建的链接/副本时拒绝覆盖;--force 也只替换链接或
本脚本的副本,不会删真实目录。如果之前用 android skills add 装过官方技能,先清掉
~/.agents/skills/<name> 里的同名真实目录,或改用 --target 装到另一个目录。
~/.agents/skills 是 Agent Skills 的标准位置,Codex / pi / VS Code Copilot /
Cursor 都会发现它;这也是默认只装一份的原因。需要额外装给 Claude Code、
Gemini / Antigravity 时:
bash tools/install-agent-skills.sh --agent claude
bash tools/install-agent-skills.sh --agent antigravity
bash tools/install-agent-skills.sh --agent allagent 路径写在 skills.config.json 的 agents 里,可用 --target 覆盖。
不同版本的 agent 可能改目录,遇到「装了但没发现」先用 --target 指到它实际
读取的目录。
有些项目希望把技能版本钉在仓库里(而不是跟着用户级目录漂移):
cd /path/to/android-app
bash /path/to/EasyAndroid/tools/install-agent-skills.sh \
--scope project --profile core
# -> /path/to/android-app/.agents/skills/项目级目录里的 .agents/skills 会被提交到那个项目自己的仓库,适合团队统一。
注意:安装脚本默认做符号链接,项目级安装会链接回 EasyAndroid 的路径;
如果不希望项目依赖 EasyAndroid 的位置,加 --copy。
| 平台 | 默认行为 |
|---|---|
| WSL2 / Linux / macOS | ln -s 符号链接 |
| Windows 原生(Git Bash) | 先试目录 junction(mklink /J,不需要管理员);失败再试 ln -s;都失败则复制 |
| 复制模式 | 目录里写 .easyandroid-skill 标记;重跑 install 会刷新副本 |
⚠️ WSL 和 Windows 的$HOME不是同一个目录。 在 WSL 里跑默认装到/home/<user>/.agents/skills,Windows 上的 agent 看不到。想让 Windows 侧的 pi / Copilot 用,请在 Git Bash 里跑,或用--target指到C:\Users\<你>\.agents\skills对应的路径。
agent 启动时会加载每个技能的 name + description。47 个技能全装不是不能跑,
但会占掉不必要的上下文,也更容易触发相近技能。所以默认 core 只装 17 个
日常最常用的:
| profile | 内容 | 适合 |
|---|---|---|
core(默认) |
架构、Compose、协程、网络、测试、安全、性能、构建 | 任意 Android 项目 |
compose |
core + 样式、XML 迁移、Navigation 3、Coil | Compose 为主的项目 |
perf |
core + Profiler | 性能排查 |
kotlin |
core + Kotlin 协程、RxJava 迁移、Gradle 逻辑 | Kotlin 工程化 |
devices |
core + 真机操作 + 官方模拟器技能 | 需要装包 / 验收 |
tv |
core + Leanback 迁移 + Media3 Cast + 真机操作 | Android TV |
xr |
core + Glimmer Compose + 投射硬件 | XR / 智能眼镜 |
wear / cars / media / ai / identity / play / build / system |
对应官方技能包 | 对应领域 |
easyandroid |
devices + 电视 / Media3 |
本仓库 |
all |
47 个全部 | 探索 / 审查,不建议日常 |
完整列表和每个集合的技能数:bash tools/install-agent-skills.sh --list。
本仓库自己的
.agents/skills/是完整目录,所以在 EasyAndroid 仓库里工作的 agent 会看到全部 47 个技能;其他 Android 项目通过安装脚本只拿 profile 选中的子集。 这是有意的:维护技能集的人需要看到全部,日常项目不需要。
bash tools/update-agent-skills.sh # 同步到当前工作树
bash tools/update-agent-skills.sh --dry-run # 只拉上游、报告数量,不写盘
bash tools/update-agent-skills.sh --check # 上游有变化时退出码 1它做四件事:
- 按
sources克隆每个上游的默认分支; - 按
include/exclude挑技能; - 复制到
.agents/skills/<name>/(带许可证); - 写
skills-sources.lock.json(每个技能的 commit)。
如果上游删除了某个技能,旧目录会从工作树移除;本地技能(localSkills)不会被碰。
上游技能重名、本地技能与上游重名、缺少 SKILL.md / 许可证,都会在落盘前报错。
.github/workflows/update-agent-skills.yml
每周一检查一次。有变化时它:
- 更新
.agents/skills/和 lock; - 跑
bash tools/verify-all.sh --skills-only; - 创建一个待审 PR(分支
automation/update-android-agent-skills),不直接改main。
合并前请人工看 diff —— 尤其注意上游是否新增了可执行脚本; 本仓库的安装脚本不会执行技能里的脚本,但 agent 在任务中可能会。
首次使用需要在仓库 Settings → Actions → General → Workflow permissions 允许 GitHub Actions 创建 Pull Request,否则
GITHUB_TOKEN只能推分支、 不能开 PR。这个流程不需要额外 secret。
# 只验 CI 配置 + 技能集(不碰 JDK / SDK / 设备,CI 和本机同一份判据)
bash tools/verify-all.sh --skills-onlyWindows 原生如果只有
python没有python3,把下面手工命令里的python3换成python;三个脚本内部都用_common.sh探测,不受影响。
skills_config.py validate 会检查:
skills.config.json能解析,profile 引用的技能都存在;defaultProfile/defaultAgents指向已登记项;- 每个
.agents/skills/<name>/SKILL.md的 frontmattername等于目录名, 且description非空; - 上游技能有
LICENSE*,lock 里的 source / repository / license 与 config 一致; - 目录集合 ==
localSkills+ lock 里的上游技能(防止「拷进来忘了登记」); - 没有重名技能、没有
../路径。
verify-all.sh --build-only(CI 现有流程)也会跑这段,所以技能集坏了不会等到
发版才发现。
- 默认只装
core。 需要某个领域时显式--profile,不要图省事装all。 - 上游是「复制」不是「子模块」。 复制才能让每个技能目录独立、可直接链接; 代价是更新要在本仓库产生一次 diff,由 PR 审阅。
- 不自动合并上游更新。 技能正文会影响 agent 的行为,必须有人看。
- Windows 的链接可能退化成副本。 副本不会自动跟随
git pull;重跑install-agent-skills.sh会刷新。--check会把「副本」标成 OK 并提醒。 - agent 目录名会变。
~/.agents/skills是目前覆盖面最广的约定;Claude / Gemini / Antigravity 的路径写在 config 里,版本不同就用--target。 - 不收录逆向工程、破解类技能。 不是本仓库的定位。
# 上游 HEAD 与 lock 是否一致(会联网)
bash tools/update-agent-skills.sh --check
# 本地配置 / lock / 目录是否自洽(不联网)
python3 tools/skills_config.py validate
bash tools/verify-all.sh --skills-only
# 看当前装了哪些 profile / agent
bash tools/install-agent-skills.sh --list
bash tools/install-agent-skills.sh --check
# 上游仓库的 HEAD(文档里的快照过期时用)
git ls-remote https://github.com/android/skills.git HEAD
git ls-remote https://github.com/new-silvermoon/awesome-android-agent-skills.git HEAD| 日期 | 变更 |
|---|---|
| 2026-10-22 | 初版:调研 8 个候选;收录 android/skills 33 个 + awesome 13 个 + 本地 1 个;加入 profile / 安装 / 周更 PR 流程 |