鸿蒙实战:全栈回顾------Kit API 全景、架构总结与未来演进
前言

图:鸿蒙实战第100篇:全栈回顾------Kit API 全景、架构总结与未来演进 运行效果截图(HarmonyOS NEXT)
从第 1 篇的环境搭建,到第 99 篇的设计模式总结,这 100 篇文章覆盖了 HarmonyOS NEXT 原生应用开发从零到一的完整链路:ArkTS 语法、ArkUI 组件体系、Canvas 高级绘图、RDB 数据持久化、Camera Kit 相机开发、端侧 AI 推理、NFC 近场通信、HMS 账号服务,直到 Widget 元服务卡片。
本篇作为全系列的"知识地图",从四个维度做最终总结:Kit API 全景表 、三层架构总览 、六大关键决策权衡 、未来演进路线图。
系列起点:第00篇 开篇与项目总览 · 系列上篇:第99篇 页面汇总与设计模式回顾
官方文档:HarmonyOS NEXT 开发指南 · ArkTS 语言参考
一、Kit API 全景
1.1 实际使用的 Kit(正式激活)
| Kit | 导入路径 | 使用文件 | 核心 API |
|---|---|---|---|
| AbilityKit | @kit.AbilityKit |
EntryAbility, LoginPage, PhoneLoginPage, BindRelationPage | UIAbility, Want, common.UIAbilityContext |
| ArkUI Kit | @kit.ArkUI |
EntryAbility | window.Window.setSystemBarEnable |
| PerformanceAnalysisKit | @kit.PerformanceAnalysisKit |
全部 40+ 文件 | hilog.info/error |
| CameraKit | @kit.CameraKit |
CapturePage | camera.CameraManager, CaptureSession |
| CoreFileKit | @kit.CoreFileKit |
CapturePage | fileIo.open/write/close |
| MediaLibraryKit | @kit.MediaLibraryKit |
CapturePage | photoAccessHelper.PhotoViewPicker |
| BasicServicesKit | @kit.BasicServicesKit |
SharePage, MetaServiceCard | pasteboard.createData, getSystemPasteboard |
| DataRelationalStore | @ohos.data.relationalStore |
5 个 DAO + DatabaseService | getRdbStore, RdbPredicates, ResultSet |
1.2 预留的生产 Kit(注释状态)
| Kit | 导入路径 | 计划用途 | 激活位置 |
|---|---|---|---|
| HMS Account Kit | @hmscore/account |
华为一键登录 | LoginPage.huaweiLogin() |
| HMS SMS | @hmscore/sms |
短信验证码 | PhoneLoginPage.sendVerifyCode() |
| MindSpore Lite | @mindspore/lite |
端侧 AI 三件套 | OcrService / HandwritingFeatureExtractor / EmotionClassifier |
| ResourceKit | @kit.ResourceKit |
AI 模型文件读取 | OcrService.loadModelFromRawfile() |
| ImageKit | @kit.ImageKit |
图片预处理 | OcrService.preprocessImage() |
二、三层架构总览
2.1 完整架构图
#mermaid-svg-bNfOxJBlLjtJdEtK{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-bNfOxJBlLjtJdEtK .error-icon{fill:#552222;}#mermaid-svg-bNfOxJBlLjtJdEtK .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bNfOxJBlLjtJdEtK .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bNfOxJBlLjtJdEtK .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bNfOxJBlLjtJdEtK .marker.cross{stroke:#333333;}#mermaid-svg-bNfOxJBlLjtJdEtK svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bNfOxJBlLjtJdEtK p{margin:0;}#mermaid-svg-bNfOxJBlLjtJdEtK .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bNfOxJBlLjtJdEtK .cluster-label text{fill:#333;}#mermaid-svg-bNfOxJBlLjtJdEtK .cluster-label span{color:#333;}#mermaid-svg-bNfOxJBlLjtJdEtK .cluster-label span p{background-color:transparent;}#mermaid-svg-bNfOxJBlLjtJdEtK .label text,#mermaid-svg-bNfOxJBlLjtJdEtK span{fill:#333;color:#333;}#mermaid-svg-bNfOxJBlLjtJdEtK .node rect,#mermaid-svg-bNfOxJBlLjtJdEtK .node circle,#mermaid-svg-bNfOxJBlLjtJdEtK .node ellipse,#mermaid-svg-bNfOxJBlLjtJdEtK .node polygon,#mermaid-svg-bNfOxJBlLjtJdEtK .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bNfOxJBlLjtJdEtK .rough-node .label text,#mermaid-svg-bNfOxJBlLjtJdEtK .node .label text,#mermaid-svg-bNfOxJBlLjtJdEtK .image-shape .label,#mermaid-svg-bNfOxJBlLjtJdEtK .icon-shape .label{text-anchor:middle;}#mermaid-svg-bNfOxJBlLjtJdEtK .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-bNfOxJBlLjtJdEtK .rough-node .label,#mermaid-svg-bNfOxJBlLjtJdEtK .node .label,#mermaid-svg-bNfOxJBlLjtJdEtK .image-shape .label,#mermaid-svg-bNfOxJBlLjtJdEtK .icon-shape .label{text-align:center;}#mermaid-svg-bNfOxJBlLjtJdEtK .node.clickable{cursor:pointer;}#mermaid-svg-bNfOxJBlLjtJdEtK .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-bNfOxJBlLjtJdEtK .arrowheadPath{fill:#333333;}#mermaid-svg-bNfOxJBlLjtJdEtK .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bNfOxJBlLjtJdEtK .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bNfOxJBlLjtJdEtK .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bNfOxJBlLjtJdEtK .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-bNfOxJBlLjtJdEtK .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bNfOxJBlLjtJdEtK .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-bNfOxJBlLjtJdEtK .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bNfOxJBlLjtJdEtK .cluster text{fill:#333;}#mermaid-svg-bNfOxJBlLjtJdEtK .cluster span{color:#333;}#mermaid-svg-bNfOxJBlLjtJdEtK div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bNfOxJBlLjtJdEtK .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-bNfOxJBlLjtJdEtK rect.text{fill:none;stroke-width:0;}#mermaid-svg-bNfOxJBlLjtJdEtK .icon-shape,#mermaid-svg-bNfOxJBlLjtJdEtK .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-bNfOxJBlLjtJdEtK .icon-shape p,#mermaid-svg-bNfOxJBlLjtJdEtK .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-bNfOxJBlLjtJdEtK .icon-shape .label rect,#mermaid-svg-bNfOxJBlLjtJdEtK .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-bNfOxJBlLjtJdEtK .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-bNfOxJBlLjtJdEtK .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-bNfOxJBlLjtJdEtK :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 读写 AppStorage
触发 DAO 操作
调用分析流水线
三表级联写入
AI 引擎层(端侧推理 · ~1,200 行)
features/ai/
AiPipelineService
OcrService(PaddleOCR-mobile)
HandwritingFeatureExtractor(MobileNetV3)
EmotionClassifier(轻量 BERT)
业务数据层(RDB · ~900 行)
features/data/
DatabaseService · UserDao
ArchiveDao · HandwritingDao
ReportDao · RelationDao
Models · DemoSeeder
跨层通信(AppStorage 11 个键)
user_id · user_token · user_name
capture_image_path · capture_source
analysis_result · current_report_id
current_archive_id
couple_bound · couple_partner_name
current_handwriting_id
UI 层(ArkUI · ~8,500 行)
pages/ 19个页面
HomePage · CapturePage · AnalyzingPage
ArchivePage · TrendPage · LoginPage
CoupleHomePage · BindRelationPage
...等 19 个 @Entry 组件
common/components/ 6 个可复用组件
HandwritingRadar · EmotionTrendChart
MatchRing · HmTitleBar
PosterTemplate · EmptyState
common/theme/ 设计令牌
AppColors · AppFonts · AppAnimations
2.2 数据流核心路径
ReportDetailPage 三个 DAO AiPipelineService AnalyzingPage CapturePage 用户 ReportDetailPage 三个 DAO AiPipelineService AnalyzingPage CapturePage 用户 #mermaid-svg-r79QDc5WnDfyjl8m{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-r79QDc5WnDfyjl8m .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-r79QDc5WnDfyjl8m .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-r79QDc5WnDfyjl8m .error-icon{fill:#552222;}#mermaid-svg-r79QDc5WnDfyjl8m .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-r79QDc5WnDfyjl8m .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-r79QDc5WnDfyjl8m .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-r79QDc5WnDfyjl8m .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-r79QDc5WnDfyjl8m .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-r79QDc5WnDfyjl8m .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-r79QDc5WnDfyjl8m .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-r79QDc5WnDfyjl8m .marker{fill:#333333;stroke:#333333;}#mermaid-svg-r79QDc5WnDfyjl8m .marker.cross{stroke:#333333;}#mermaid-svg-r79QDc5WnDfyjl8m svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-r79QDc5WnDfyjl8m p{margin:0;}#mermaid-svg-r79QDc5WnDfyjl8m .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-r79QDc5WnDfyjl8m text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-r79QDc5WnDfyjl8m .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-r79QDc5WnDfyjl8m .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-r79QDc5WnDfyjl8m .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-r79QDc5WnDfyjl8m .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-r79QDc5WnDfyjl8m #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-r79QDc5WnDfyjl8m .sequenceNumber{fill:white;}#mermaid-svg-r79QDc5WnDfyjl8m #sequencenumber{fill:#333;}#mermaid-svg-r79QDc5WnDfyjl8m #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-r79QDc5WnDfyjl8m .messageText{fill:#333;stroke:none;}#mermaid-svg-r79QDc5WnDfyjl8m .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-r79QDc5WnDfyjl8m .labelText,#mermaid-svg-r79QDc5WnDfyjl8m .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-r79QDc5WnDfyjl8m .loopText,#mermaid-svg-r79QDc5WnDfyjl8m .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-r79QDc5WnDfyjl8m .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-r79QDc5WnDfyjl8m .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-r79QDc5WnDfyjl8m .noteText,#mermaid-svg-r79QDc5WnDfyjl8m .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-r79QDc5WnDfyjl8m .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-r79QDc5WnDfyjl8m .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-r79QDc5WnDfyjl8m .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-r79QDc5WnDfyjl8m .actorPopupMenu{position:absolute;}#mermaid-svg-r79QDc5WnDfyjl8m .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-r79QDc5WnDfyjl8m .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-r79QDc5WnDfyjl8m .actor-man circle,#mermaid-svg-r79QDc5WnDfyjl8m line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-r79QDc5WnDfyjl8m :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 拍照 / 选图 fileIo 写入本地文件 AppStorage: capture_image_path 跳转分析页 analyze(imagePath) AnalysisResult HandwritingDao.create() handwritingId ReportDao.create(handwritingId) reportId ArchiveDao.incrementRecord() AppStorage: analysis_result + current_report_id replaceUrl → ReportDetailPage 展示雷达图 + 报告内容
三、项目代码量统计
3.1 全项目代码分布
| 目录 | 文件数 | 代码行数 | 占比 | 说明 |
|---|---|---|---|---|
pages/(19 页面) |
19 | ~8,500 | 63% | 业务页面,含大量 Canvas 和动画 |
features/ai/(AI 层) |
4 | ~1,200 | 9% | 三件套 + 流水线调度 |
common/components/(6 组件) |
6 | ~1,000 | 8% | 雷达图等可复用 Canvas 组件 |
features/data/(数据层) |
8 | ~900 | 7% | 5 DAO + DatabaseService + Models + Seeder |
common/theme/(主题系统) |
3 | ~600 | 5% | 颜色/字体/动画常量 |
EntryAbility + 配置 + NFC |
~10 | ~800 | 6% | 入口、配置文件、NFC 扩展 |
| 总计 | ~50 | ~13,000 | 100% | 50 个 .ets 文件 |
3.2 功能点完成度(P0-P4)
- P0 核心闭环 (5 页面):拍照 → 分析 → 报告 → 归档 → 趋势,100% 完成
- P1 用户系统(2 页 + 1 DAO):登录/HMS/手机号,调试模式 100% / 生产代码预留 ✓
- P2 双人空间 (3 页 + 2 DAO):绑定 + 双人首页 + 合盘,100% 完成
- P3 增强体验 (5 页):分享/未归类/桌面卡片/空状态/NFC,100% 完成
- P4 AI 引擎(4 文件):流水线架构完整,当前 Mock / 真实 MindSpore Lite 预留
四、六大关键决策权衡
4.1 端侧 AI vs 云端 API
决策:所有 AI 推理全部端侧执行,不上传云端。
| 维度 | 端侧 AI | 云端 API |
|---|---|---|
| 隐私 | 数据不出设备 ✅ | 上传服务器 ❌ |
| 成本 | 无 API 调用费 ✅ | 按调用量计费 ❌ |
| 离线 | 支持 ✅ | 需要网络 ❌ |
| 精度 | 受设备限制 | 可无限扩展 |
| 延迟 | 高端机 <1s | 网络依赖 |
结论:对于笔迹(生物特征数据),隐私优先级最高,端侧是唯一可接受方案。
4.2 Canvas 绘图 vs 图片资源
决策:雷达图/折线图/插画全部 Canvas 动态绘制。
优势:
- 数据驱动------雷达图比例随数据实时变化
- 动画支持------入场绘制进度、呼吸缩放
- 包体积小------约 10 个 Canvas 组件 ≈ 10KB vs 同等质量图片 ≈ 1MB+
4.3 Mock + 注释化生产代码架构
决策 :调试期用 setTimeout + Mock 模拟所有外部依赖,生产代码注释保留。
调试-生产双模式代码示例:
typescript
// AnalyzingViewModel.ets ------ 双模式架构
async startAnalysis(imagePath: string): Promise<void> {
// ✅ Mock 模式(当前启用)
await new Promise<void>(resolve => setTimeout(resolve, 2000))
const mockResult = { emotion: 'positive', score: 85, keywords: ['平静', '希望'] }
AppStorage.setOrCreate('analysis_result', JSON.stringify(mockResult))
/* 🟡 生产模式(解注释即可切换)
const ocrResult = await OcrService.recognize(imagePath)
const features = HandwritingFeatureExtractor.extract(ocrResult.text)
const emotion = await EmotionClassifier.classify(features)
AppStorage.setOrCreate('analysis_result', JSON.stringify(emotion))
*/
}
理由:
- 无需后端/HMS 账号即可完整开发全部 UI
- 生产迁移零成本:解注释 + 删 Mock 即可
- 团队可并行开发(UI 无需等待 API 申请寡批)
五、未来演进路线
5.1 近端(可立即执行)
#mermaid-svg-a8y7ZrNJPKjMidW9{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-a8y7ZrNJPKjMidW9 .error-icon{fill:#552222;}#mermaid-svg-a8y7ZrNJPKjMidW9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-a8y7ZrNJPKjMidW9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-a8y7ZrNJPKjMidW9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-a8y7ZrNJPKjMidW9 .marker.cross{stroke:#333333;}#mermaid-svg-a8y7ZrNJPKjMidW9 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-a8y7ZrNJPKjMidW9 p{margin:0;}#mermaid-svg-a8y7ZrNJPKjMidW9 .mermaid-main-font{font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-a8y7ZrNJPKjMidW9 .exclude-range{fill:#eeeeee;}#mermaid-svg-a8y7ZrNJPKjMidW9 .section{stroke:none;opacity:0.2;}#mermaid-svg-a8y7ZrNJPKjMidW9 .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-a8y7ZrNJPKjMidW9 .section2{fill:#fff400;}#mermaid-svg-a8y7ZrNJPKjMidW9 .section1,#mermaid-svg-a8y7ZrNJPKjMidW9 .section3{fill:white;opacity:0.2;}#mermaid-svg-a8y7ZrNJPKjMidW9 .sectionTitle0{fill:#333;}#mermaid-svg-a8y7ZrNJPKjMidW9 .sectionTitle1{fill:#333;}#mermaid-svg-a8y7ZrNJPKjMidW9 .sectionTitle2{fill:#333;}#mermaid-svg-a8y7ZrNJPKjMidW9 .sectionTitle3{fill:#333;}#mermaid-svg-a8y7ZrNJPKjMidW9 .sectionTitle{text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-a8y7ZrNJPKjMidW9 .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-a8y7ZrNJPKjMidW9 .grid .tick text{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-a8y7ZrNJPKjMidW9 .grid path{stroke-width:0;}#mermaid-svg-a8y7ZrNJPKjMidW9 .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-a8y7ZrNJPKjMidW9 .task{stroke-width:2;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskText{text-anchor:middle;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutsideRight{fill:black;text-anchor:start;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-a8y7ZrNJPKjMidW9 .task.clickable{cursor:pointer;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskText0,#mermaid-svg-a8y7ZrNJPKjMidW9 .taskText1,#mermaid-svg-a8y7ZrNJPKjMidW9 .taskText2,#mermaid-svg-a8y7ZrNJPKjMidW9 .taskText3{fill:white;}#mermaid-svg-a8y7ZrNJPKjMidW9 .task0,#mermaid-svg-a8y7ZrNJPKjMidW9 .task1,#mermaid-svg-a8y7ZrNJPKjMidW9 .task2,#mermaid-svg-a8y7ZrNJPKjMidW9 .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutside0,#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutside2{fill:black;}#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutside1,#mermaid-svg-a8y7ZrNJPKjMidW9 .taskTextOutside3{fill:black;}#mermaid-svg-a8y7ZrNJPKjMidW9 .active0,#mermaid-svg-a8y7ZrNJPKjMidW9 .active1,#mermaid-svg-a8y7ZrNJPKjMidW9 .active2,#mermaid-svg-a8y7ZrNJPKjMidW9 .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-a8y7ZrNJPKjMidW9 .activeText0,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeText1,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeText2,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeText3{fill:black!important;}#mermaid-svg-a8y7ZrNJPKjMidW9 .done0,#mermaid-svg-a8y7ZrNJPKjMidW9 .done1,#mermaid-svg-a8y7ZrNJPKjMidW9 .done2,#mermaid-svg-a8y7ZrNJPKjMidW9 .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText0,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText1,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText2,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText3{fill:black!important;}#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText0.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText0.taskTextOutsideRight,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText1.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText1.taskTextOutsideRight,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText2.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText2.taskTextOutsideRight,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText3.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-a8y7ZrNJPKjMidW9 .crit0,#mermaid-svg-a8y7ZrNJPKjMidW9 .crit1,#mermaid-svg-a8y7ZrNJPKjMidW9 .crit2,#mermaid-svg-a8y7ZrNJPKjMidW9 .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCrit0,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCrit1,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCrit2,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCrit0,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCrit1,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCrit2,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-a8y7ZrNJPKjMidW9 .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-a8y7ZrNJPKjMidW9 .milestoneText{font-style:italic;}#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText0,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText1,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText2,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText3{fill:black!important;}#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText0.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText0.taskTextOutsideRight,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText1.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText1.taskTextOutsideRight,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText2.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText2.taskTextOutsideRight,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText3.taskTextOutsideLeft,#mermaid-svg-a8y7ZrNJPKjMidW9 .doneCritText3.taskTextOutsideRight{fill:black!important;}#mermaid-svg-a8y7ZrNJPKjMidW9 .vert{stroke:navy;}#mermaid-svg-a8y7ZrNJPKjMidW9 .vertText{font-size:15px;text-anchor:middle;fill:navy!important;}#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCritText0,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCritText1,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCritText2,#mermaid-svg-a8y7ZrNJPKjMidW9 .activeCritText3{fill:black!important;}#mermaid-svg-a8y7ZrNJPKjMidW9 .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-a8y7ZrNJPKjMidW9 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 2026-07-01 2026-07-03 2026-07-05 2026-07-07 2026-07-09 2026-07-11 2026-07-13 2026-07-15 2026-07-17 2026-07-19 2026-07-21 2026-07-23 2026-07-25 2026-07-27 2026-07-29 2026-07-31 2026-08-01 2026-08-03 2026-08-05 解开 HMS Account Kit 注释 集成 SMS 验证码服务 集成 MindSpore Lite 真实模型 OCR 精度调优 ArchivePage 分页加载 AppStorage 键清理 用户系统 AI 引擎 性能 近端演进路线(3 个月)
| 项目 | 涉及文件 | 预估工作量 |
|---|---|---|
| 解开 HMS Account Kit | LoginPage.ets | 2 小时 |
| 接入 SMS 验证码 | PhoneLoginPage.ets | 4 小时 |
| 集成 MindSpore Lite | ai/ 下 4 个文件 | 1-2 周 |
| ArchivePage 分页 | ArchiveDao + ArchivePage | 1 天 |
5.2 中端(架构演进)
- 端侧模型优化:MindSpore Lite 模型量化 + NNPU 加速,推理时间 3s → 500ms
- 超级桌面 Widget :完整接入
FormExtensionAbility,实现真实桌面卡片刷新 - 跨端数据同步:RDB 数据加密后通过 Cloud DB 同步,多设备无缝切换
- 关系图谱:将 ArchivePage 的档案关系可视化为力导向图
5.3 远端(产品演进)
| 方向 | 核心思路 | 技术方案 |
|---|---|---|
| 多模态输入 | 语音情绪 + 微表情 + 笔迹三路交叉验证 | Audio Kit + Camera 人脸检测 |
| 社群化 | 匿名笔迹漂流瓶、情绪日记广场 | Cloud DB + Push Kit |
| AI 陪伴 | LLM 接入生成个性化笔迹解析 | 华为盘古大模型 API |
| 场景化 SDK | 笔迹情绪 SDK 开放给学校/企业 | HSP 动态共享包 |
六、核心收获总结
经过 100 篇文章的完整覆盖,本系列的核心收获可概括为 "一个理念、两大范式、三层架构":
6.1 一个理念:端侧 AI 是隐私应用的未来
用户手写笔迹 = 生物特征数据
生物特征数据 = 不可上传
不可上传 → 端侧处理 → MindSpore Lite
6.2 两大范式
四段式页面范式(15/19 页面遵循):
typescript
build() {
Column() {
StatusBar() // ① 状态栏
Scroll() { MainContent() } // ② 内容区
ActionBar() // ③ 操作区(可选)
TabBar() // ④ 底部导航(登录/分析页除外)
}
}
DAO 四步统一范式(5 DAO · 32 方法全遵循):
typescript
// try → getStore → 操作 → close → catch
6.3 三层架构
UI 层(ArkUI · 19 页面 + 6 组件)
↕ AppStorage 11 键
业务数据层(RDB · 5 DAO)
↕ 三表级联写入
AI 引擎层(MindSpore Lite 三件套)
总结
100 篇、约 80,000 字技术内容,覆盖了从 ArkTS 零基础到鸿蒙原生 App 全栈上线的完整路径。这份系列的最大价值不是"告诉你每个 API 怎么用",而是:
- 为什么这样设计(决策记录)
- 哪里是坑 (
rs.close()/setInterval清理/@State Set替换等) - 如何复用(7 大共享模式)
- 如何演进(生产代码预留 + 注释化架构)
感谢一路陪伴!项目源码和全部文章同步发布,欢迎 Star 和 Issue。
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- HarmonyOS NEXT 开发指南
- ArkTS 语言参考
- ArkUI 组件参考
- relationalStore RDB
- MindSpore Lite 端侧推理
- DevEco Studio 下载
- HMS Core 集成指南
- HarmonyOS Widget 桌面卡片开发
八、技术栈全景总结
8.1 100 篇文章技术覆盖地图
#mermaid-svg-84ptT9OweqbgmOEo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-84ptT9OweqbgmOEo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-84ptT9OweqbgmOEo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-84ptT9OweqbgmOEo .error-icon{fill:#552222;}#mermaid-svg-84ptT9OweqbgmOEo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-84ptT9OweqbgmOEo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-84ptT9OweqbgmOEo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-84ptT9OweqbgmOEo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-84ptT9OweqbgmOEo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-84ptT9OweqbgmOEo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-84ptT9OweqbgmOEo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-84ptT9OweqbgmOEo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-84ptT9OweqbgmOEo .marker.cross{stroke:#333333;}#mermaid-svg-84ptT9OweqbgmOEo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-84ptT9OweqbgmOEo p{margin:0;}#mermaid-svg-84ptT9OweqbgmOEo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-84ptT9OweqbgmOEo .cluster-label text{fill:#333;}#mermaid-svg-84ptT9OweqbgmOEo .cluster-label span{color:#333;}#mermaid-svg-84ptT9OweqbgmOEo .cluster-label span p{background-color:transparent;}#mermaid-svg-84ptT9OweqbgmOEo .label text,#mermaid-svg-84ptT9OweqbgmOEo span{fill:#333;color:#333;}#mermaid-svg-84ptT9OweqbgmOEo .node rect,#mermaid-svg-84ptT9OweqbgmOEo .node circle,#mermaid-svg-84ptT9OweqbgmOEo .node ellipse,#mermaid-svg-84ptT9OweqbgmOEo .node polygon,#mermaid-svg-84ptT9OweqbgmOEo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-84ptT9OweqbgmOEo .rough-node .label text,#mermaid-svg-84ptT9OweqbgmOEo .node .label text,#mermaid-svg-84ptT9OweqbgmOEo .image-shape .label,#mermaid-svg-84ptT9OweqbgmOEo .icon-shape .label{text-anchor:middle;}#mermaid-svg-84ptT9OweqbgmOEo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-84ptT9OweqbgmOEo .rough-node .label,#mermaid-svg-84ptT9OweqbgmOEo .node .label,#mermaid-svg-84ptT9OweqbgmOEo .image-shape .label,#mermaid-svg-84ptT9OweqbgmOEo .icon-shape .label{text-align:center;}#mermaid-svg-84ptT9OweqbgmOEo .node.clickable{cursor:pointer;}#mermaid-svg-84ptT9OweqbgmOEo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-84ptT9OweqbgmOEo .arrowheadPath{fill:#333333;}#mermaid-svg-84ptT9OweqbgmOEo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-84ptT9OweqbgmOEo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-84ptT9OweqbgmOEo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-84ptT9OweqbgmOEo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-84ptT9OweqbgmOEo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-84ptT9OweqbgmOEo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-84ptT9OweqbgmOEo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-84ptT9OweqbgmOEo .cluster text{fill:#333;}#mermaid-svg-84ptT9OweqbgmOEo .cluster span{color:#333;}#mermaid-svg-84ptT9OweqbgmOEo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-84ptT9OweqbgmOEo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-84ptT9OweqbgmOEo rect.text{fill:none;stroke-width:0;}#mermaid-svg-84ptT9OweqbgmOEo .icon-shape,#mermaid-svg-84ptT9OweqbgmOEo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-84ptT9OweqbgmOEo .icon-shape p,#mermaid-svg-84ptT9OweqbgmOEo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-84ptT9OweqbgmOEo .icon-shape .label rect,#mermaid-svg-84ptT9OweqbgmOEo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-84ptT9OweqbgmOEo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-84ptT9OweqbgmOEo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-84ptT9OweqbgmOEo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 鹿鹿全栈技术树
ArkTS 语言基础
第1-12篇
ArkUI 组件与布局
第13-23篇
RDB 数据持久化
第24-33篇
相机与图片处理
第34-38篇
NFC 近场通信
第39-43篇
Canvas 数据可视化
第44-51篇
端侧 AI 推理
第52-57篇
动画与交互
第58-63篇
分享与通信
第64-66篇
设计令牌系统
第67-71篇
状态与路由
第72-76篇
19个完整页面
第77-99篇
8.2 五大工程化经验总结
经验 1:设计令牌先行
在写第一行业务代码之前,先定义 AppColors / AppFonts / AppShadow / AppAnimations。这 4 个常量类决定了整个项目的视觉一致性,返工成本极低。
经验 2:单例 + DAO 分层
DatabaseService 单例管理连接,每个表对应一个 DAO 类,DAO 只操作自己的表。这个约定让 500+ 行的数据层代码保持清晰可维护。
经验 3:AppStorage 作为跨页面状态总线
不要在每个页面都从数据库重新加载用户信息。把用户态、当前档案 ID 等高频数据存 AppStorage,一次写入,处处可读。
经验 4:动画与数据解耦
AnalyzingPage 的进度动画与 AI 推理完全解耦------动画自己跑循环,推理结果来了再驱动页面跳转。这种模式可以推广到所有「有等待感」的页面。
经验 5:DemoSeeder 作为「活文档」
DemoSeeder 不只是填充演示数据,它也是数据模型的可执行文档------看 DemoSeeder 的代码,就能理解所有实体关系。
8.3 HarmonyOS 生态未来展望
| 技术方向 | 现状 | 预期演进 |
|---|---|---|
| ArkTS | API 11 稳定版 | 持续对齐 TypeScript 标准 |
| Navigation | 逐步替代 router | 成为主流导航方案 |
| 元服务 | Widget + 快应用 | 更多分发场景 |
| 端侧 AI | MindSpore Lite | 大模型本地部署能力增强 |
| 双人协同 | NFC + 同账号 | 跨设备流转更顺畅 |
8.4 给读者的寄语
鸿蒙开发是一个充满机遇的领域。从 ArkTS 的声明式 UI 哲学,到端侧 AI 推理的独特能力,再到 NFC 碰一碰的创新交互,鸿蒙生态在 2024-2025 年进入了高速成长期。
掌握这 100 篇的技术栈,你已经具备了开发一款完整 HarmonyOS NEXT 应用的全部能力。接下来的问题不是「会不会」,而是「做什么」。
去做吧。把你的想法,用鸿蒙写出来。
九、技术栈能力矩阵
完成这 100 篇学习后,你掌握的技术能力可以用以下矩阵描述:
9.1 前端 UI 层
| 能力 | 覆盖篇章 | 掌握程度 |
|---|---|---|
| ArkUI 布局系统 | 第13-22篇 | 深入 |
| 自定义动画 | 第58-63篇 | 深入 |
| Canvas 自绘图表 | 第44-51篇 | 深入 |
| 设计 Token 体系 | 第67-71篇 | 熟练 |
| 页面路由与传参 | 第74、09篇 | 熟练 |
9.2 数据与持久化层
| 能力 | 覆盖篇章 | 掌握程度 |
|---|---|---|
| RDB 关系数据库 | 第24-33篇 | 深入 |
| DAO 设计模式 | 第32、84-88篇 | 深入 |
| 数据版本升级 | 第26篇 | 熟练 |
| AppStorage 全局状态 | 第72篇 | 熟练 |
9.3 系统能力层
| 能力 | 覆盖篇章 | 掌握程度 |
|---|---|---|
| 相机与媒体 | 第34-38篇 | 熟练 |
| NFC 近场通信 | 第39-40、64篇 | 了解 |
| 剪贴板分享 | 第65、96篇 | 熟练 |
| 桌面卡片 Widget | 第98篇 | 了解 |
| 端侧 AI 推理 | 第52-57篇 | 熟练 |
9.4 未来进阶路线图
#mermaid-svg-K3am6jAISFBdhmzA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-K3am6jAISFBdhmzA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-K3am6jAISFBdhmzA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-K3am6jAISFBdhmzA .error-icon{fill:#552222;}#mermaid-svg-K3am6jAISFBdhmzA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-K3am6jAISFBdhmzA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-K3am6jAISFBdhmzA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-K3am6jAISFBdhmzA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-K3am6jAISFBdhmzA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-K3am6jAISFBdhmzA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-K3am6jAISFBdhmzA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-K3am6jAISFBdhmzA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-K3am6jAISFBdhmzA .marker.cross{stroke:#333333;}#mermaid-svg-K3am6jAISFBdhmzA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-K3am6jAISFBdhmzA p{margin:0;}#mermaid-svg-K3am6jAISFBdhmzA .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-K3am6jAISFBdhmzA .cluster-label text{fill:#333;}#mermaid-svg-K3am6jAISFBdhmzA .cluster-label span{color:#333;}#mermaid-svg-K3am6jAISFBdhmzA .cluster-label span p{background-color:transparent;}#mermaid-svg-K3am6jAISFBdhmzA .label text,#mermaid-svg-K3am6jAISFBdhmzA span{fill:#333;color:#333;}#mermaid-svg-K3am6jAISFBdhmzA .node rect,#mermaid-svg-K3am6jAISFBdhmzA .node circle,#mermaid-svg-K3am6jAISFBdhmzA .node ellipse,#mermaid-svg-K3am6jAISFBdhmzA .node polygon,#mermaid-svg-K3am6jAISFBdhmzA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-K3am6jAISFBdhmzA .rough-node .label text,#mermaid-svg-K3am6jAISFBdhmzA .node .label text,#mermaid-svg-K3am6jAISFBdhmzA .image-shape .label,#mermaid-svg-K3am6jAISFBdhmzA .icon-shape .label{text-anchor:middle;}#mermaid-svg-K3am6jAISFBdhmzA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-K3am6jAISFBdhmzA .rough-node .label,#mermaid-svg-K3am6jAISFBdhmzA .node .label,#mermaid-svg-K3am6jAISFBdhmzA .image-shape .label,#mermaid-svg-K3am6jAISFBdhmzA .icon-shape .label{text-align:center;}#mermaid-svg-K3am6jAISFBdhmzA .node.clickable{cursor:pointer;}#mermaid-svg-K3am6jAISFBdhmzA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-K3am6jAISFBdhmzA .arrowheadPath{fill:#333333;}#mermaid-svg-K3am6jAISFBdhmzA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-K3am6jAISFBdhmzA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-K3am6jAISFBdhmzA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-K3am6jAISFBdhmzA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-K3am6jAISFBdhmzA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-K3am6jAISFBdhmzA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-K3am6jAISFBdhmzA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-K3am6jAISFBdhmzA .cluster text{fill:#333;}#mermaid-svg-K3am6jAISFBdhmzA .cluster span{color:#333;}#mermaid-svg-K3am6jAISFBdhmzA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-K3am6jAISFBdhmzA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-K3am6jAISFBdhmzA rect.text{fill:none;stroke-width:0;}#mermaid-svg-K3am6jAISFBdhmzA .icon-shape,#mermaid-svg-K3am6jAISFBdhmzA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-K3am6jAISFBdhmzA .icon-shape p,#mermaid-svg-K3am6jAISFBdhmzA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-K3am6jAISFBdhmzA .icon-shape .label rect,#mermaid-svg-K3am6jAISFBdhmzA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-K3am6jAISFBdhmzA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-K3am6jAISFBdhmzA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-K3am6jAISFBdhmzA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 当前水平
鸿蒙分布式能力
跨设备流转
企业级架构
多端协同应用
手机/平板/车机/大屏
HAR 组件库抽取
HSP 动态共享包
掌握这 100 篇的技术栈,你已经具备了开发一款完整 HarmonyOS NEXT 应用的全部能力。接下来的问题不是「会不会」,而是「做什么」。
感谢每一位读完这 100 篇文章的开发者朋友! 🦌
9.5 学习路径建议
如果你是第一次接触鸿蒙开发,建议按以下顺序重点回顾:
- 基础阶段(第01-12篇):环境搭建 → ArkTS 语法 → 模块配置
- UI 阶段(第13-23篇):布局组件 → 自定义组件 → 生命周期
- 数据阶段(第24-33篇):RDB 数据库 → DAO 模式 → 版本管理
- 系统能力(第34-43篇):相机 → NFC → 二维码
- 进阶特性(第44-72篇):Canvas → AI 推理 → 动画 → 设计系统
- 完整页面(第77-98篇):按照页面流程完整实现每个功能页
持续关注本系列,我们将继续探索 HarmonyOS NEXT 的分布式能力、多设备协同等更前沿的课题。
如果这个系列对你有帮助,欢迎点赞👍、收藏⭐、关注🔔。这是你给作者最好的礼物!