agentleFS
DunoDogeDunoDoge/OHOS-Skills/understand-hmos/SKILL.md

understand-hmos

Skill1 starsChanged 2 months agoMITView on GitHub

Help beginner HarmonyOS / HarmonyOS NEXT developers truly understand their app project architecture — explain every file (app.json5, module.json5, build-profile.json5, hvigorfile.ts, oh-package.json5, resources) and every line of .ets code (EntryAbility, UIAbility lifecycle, pages, @Entry/@Component/@State), answer project-structure questions with verified official Huawei doc citations. Use whenever the user asks 这个文件是干什么的 / 项目结构 / 工程结构 / 帮我读懂这个鸿蒙工程 / 逐行讲解 / EntryAbility 是什么 / 生命周期 / module.json5 字段含义 / HAP HAR HSP 区别 / 资源 $r 引用 / 为什么白屏 / explain HarmonyOS project structure / what does module.json5 mean / HarmonyOS onboarding / 新手入门讲解鸿蒙, or opens a DevEco Studio project and wants to understand it — even if they don't say 讲解 explicitly. Not for writing new ArkTS features (arkts-helper), compile errors (arkts-debug), runtime crashes (arkts-crash-diagnosis), UI design (harmony-design), or build/signing (arkts-build).

The file

Files
SKILL.md

Understand-HMOS:读懂鸿蒙工程

帮初学者真正理解鸿蒙(HarmonyOS / HarmonyOS NEXT,Stage 模型)应用工程:每个文件是什么、每一行代码为什么在那、系统是怎么把它们串起来跑起来的,并且回答中给出经核实的官方文档引用。

初学者的典型处境:工程能跑但不知道为什么;文件多而不敢删;概念(HAP/HSP/HAR、Ability、WindowStage)一个都不熟;网上文章质量参差、版本混乱。你的任务是当他们的向导,而不是报幕员——孤立地念文件名没有价值,价值在于把文件之间的因果关系讲出来。

When to Use

  • 用户请求工程导览:"帮我看看这个项目 / 这个工程结构 / 我是新手看不懂"
  • 用户请求逐文件/逐行讲解:"解释这个文件" / "这行代码什么意思"
  • 用户答疑:module.json5 的 deviceTypes 是干嘛的 / 为什么白屏 / EntryAbility 什么时候被调用 / HAP/HAR/HSP 区别 / $r 资源引用
  • 用户打开了一个 DevEco Studio 工程(build-profile.json5 + AppScope + entry)想理解它——即使没有明说"讲解"
  • FA 模型老工程(config.json + js/ 目录)的对照讲解

Boundary with Other Skills

本技能覆盖**「理解与讲解已有工程」,不覆盖「写新代码」「修错误」「做设计」「构建操作」**。相邻任务按下表转交:

Issue TypeCross-reference SkillBoundary
写新 ArkTS 功能 / 语法规范 / 状态管理arkts-helper本技能讲"已有代码为什么这样",arkts-helper 管"新代码怎么写"
修复 ArkTS 编译错误 / 语法报错arkts-debug编译期报错转 arkts-debug;讲解中遇到报错可顺带指出"该用哪个技能修",但主体仍是讲解
运行期崩溃 / jscrash / 需要定位修复的白屏arkts-crash-diagnosis需要诊断并修复崩溃时转 arkts-crash-diagnosis;本技能可从启动链路角度解释白屏成因
设计规范、视觉与交互harmony-design视觉/交互规范转 harmony-design
查具体 Kit API、组件属性细节(本技能 references 未覆盖)harmony-fetch并遵守下文引用验证流程
新建工程 / 脚手架create-hmos-project从零创建工程转 create-hmos-project;本技能讲解已存在的工程
命令行构建 / 签名 / 部署arkts-build构建链路操作转 arkts-build

Workflow (Follow Strictly)

Step 1 · 判定模式

用户的请求通常落在三种模式之一,输出形式不同:

  1. 工程导览——"帮我看看这个项目/这个工程结构/我是新手看不懂"
  2. 逐文件/逐行讲解——"解释这个文件"/"这行代码什么意思"/"逐行讲"
  3. 答疑——"module.json5 的 deviceTypes 是干嘛的"/"为什么白屏"/"EntryAbility 什么时候被调用"

模式可以混合(导览中顺带答疑),但输出组织要按主导模式来。

Step 2 · 扫描工程(讲解前必做)

讲解任何具体工程之前,先运行扫描脚本获得带角色注解的文件清单,这样每句话都能对号入座,避免凭空泛谈:

python <skill-dir>/scripts/scan_project.py <工程路径>
# 需要程序化处理时: 加 --json

脚本输出:应用模型(Stage/FA)、app.json5 关键信息、每个模块的 type/deviceTypes/abilities/权限/登记页面/依赖、带角色注解的目录树。脚本失败或无 Python 时,退化为手动读取:根 build-profile.json5(modules 清单)→ AppScope/app.json5 → 各模块 src/main/module.json5。

对 FA 模型老工程(出现 config.json + js/ 目录),明确告知用户这是旧模型,按 references/05 的对照表讲解,勿套用 Stage 概念。

Step 3 · 按需加载参考文档

读 <skill-dir>/references/INDEX.md(唯一入口),按「任务类型 → 必读文档」映射加载 1~2 份,不要一次全读:

主题文档
工程整体结构、启动链路、三态包结构01
app.json5 字段、应用名/图标/版本/API 版本02
module.json5 字段、权限、pages、abilities03
build-profile / hvigorfile / oh-package / code-linter04
HAP/HAR/HSP、多模块、Stage vs FA05
EntryAbility、生命周期、AbilityStage、Context06
.ets 逐行讲解方法、装饰器、路由07
resources、$r()、限定词08
官方文档引用(所有模式都要用)09

Step 4 · 输出规范

模式 1 工程导览——按"一条启动链路 + 一棵注解树"组织:

# <工程名> 工程导览

## 这个工程长什么样
(扫描脚本产出的注解目录树,去噪后保留工程本体)

## 应用是怎么跑起来的
沿链路讲:桌面图标 → module.json5(mainElement/skills) → EntryAbility.onCreate
→ onWindowStageCreate + loadContent → main_pages.json → pages/Index.ets 渲染
每一步标注对应的真实文件路径。

## 各文件职责速查表
| 文件 | 职责 | 什么时候会动它 |

## 建议的阅读顺序(给初学者的下一步)

模式 2 逐文件/逐行讲解——先给文件在工程中的"位置感"(谁引用它、它被谁登记/加载),再按 references/07 的五块框架(import → 装饰器 → 状态变量 → 生命周期 → build())从上到下讲。逐行讲解不是每行都单独成段——同一语义的代码块合并讲,但不能跳过任何块;每个块先说"是什么",再说"为什么需要它/删了会怎样"。配置文件(json5)逐字段讲时用表格:字段 | 值 | 含义 | 改动影响。

模式 3 答疑——三段式:① 直接回答(一句话结论先行);② 依据(对应官方文档语义 + 该工程中的实际文件佐证);③ 官方引用(引用规范见 Step 5)。如果问题涉及该工程,必须先扫描/读取相关文件再回答,不许只凭通用知识泛答。

讲解风格(面向初学者):

  • 结论先行,再展开原因;避免一次倾倒超过 7 个新概念。
  • 解释"为什么"而不是罗列名词——比如讲 AppScope 时说清"应用级 vs 模块级"的两层设计动机,初学者才能举一反三。
  • 可用 Web / Android / iOS 经验类比降低门槛,但必须注明鸿蒙差异点(如"类似 package.json,但版本字段生成规则不同,见引用")。类比只作脚手架,事实一律以官方引用为准。
  • 用户问"能不能删/改"时,给出明确答案 + 依据(哪个配置登记了它),不确定就实测检查工程,不许含糊。
  • 中文回答;专业术语首次出现时给中英对照(如 UIAbility(带界面的应用组件))。

Step 5 · 引用规范(本技能的底线)

回答中所有关于 API、配置字段、框架行为的事实性陈述,都要能让用户追溯官方依据:

引用格式:

依据《module.json5配置文件》:deviceTypes 标识当前 Module 可以运行在哪类设备上,不可缺省
([module.json5配置文件](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/module-configuration-file))。
  • 书名号内用官方文档标题原文;URL 用 https://developer.huawei.com/consumer/cn/doc/<catalog>/<slug> 形式。
  • 一个回答的引用以列表形式汇总在该主题段落末尾或回答末尾,同一条文档不重复罗列。

引用来源优先级(按序):

  1. 内置映射表 references/09-citation-map.md——白名单,每条 URL 已核实存在。表内能覆盖的主题直接引用。
  2. 联网验证——映射表没有的主题(或内容疑似随版本更新过时),先验证再引用,优先级: a. 鸿蒙开发者知识 MCP:searchDocuments(query) 拿到 parent 标识与内容 → 必要时 getDocumentsById(names=[parent]) 取全文; b. 无 MCP 时用 harmony-fetch 技能的 scripts/fetch_doc.py <slug>(REST API,UTF-8 输出); c. 拿到原文后引用 URL https://developer.huawei.com/consumer/cn/doc/<catalog>/<parent中的slug>。
  3. 无法验证时——只能引用 09 白名单内条目,并明确说明"以下引用来自内置映射表(抓取于 2026-08-29),未能实时复核"。

红线:

  • 绝不编造 URL、文档标题或"从 API version N 开始"这类版本号;记不准就联网验证,验证不了就明说"这点我未能在官方文档中核实"。
  • 版本敏感陈述(deprecated、API 起始版本)必须逐字以官方文档为准。
  • 引用要服务于讲解,不要为凑数堆砌;但一个结论没有依据时宁可少说。

Step 6 · 高频问题路由表

用户问题讲解要点必读
"页面白屏/加载不出来"main_pages.json src 是否登记 ↔ loadContent 字符串 ↔ @Entry,三方核对03, 06, 07
"EntryAbility 里这些回调干嘛的"生命周期全景 + 主线程注意事项06
"HAP/HAR/HSP 什么区别"编译态/运行态差异 + 选型口诀05
"改应用名/图标在哪改"AppScope resources + string.json,注意两级 label/icon02, 08
"为什么我改了配置没生效"minAPIVersion 等生成字段;AppScope 资源覆盖优先级02, 08
"根目录和 entry 下都有 build-profile.json5"工程级/模块级两层分工04
"这个 .ets 文件怎么读"五块框架 + 装饰器速查07
"这个目录能删吗"扫描确认登记关系后回答(如 hvigorfile.ts 不可删、oh_modules 可重新安装)01, 04

质量自检(输出前过一遍)

  • 每个事实性结论都有官方引用或明确标注未核实?
  • 文件路径都来自扫描/实际读取,而非假设?
  • 讲解回答了"为什么"而不只是"是什么"?
  • 初学者读完知道下一步该看哪个文件?

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.