鸿蒙系统架构与开发入门

What — 是什么

鸿蒙(HarmonyOS)是华为自研的全场景分布式操作系统,采用”1+8+N”战略(1手机+8终端+N生态),支持手机、平板、手表、电视、车机等多设备协同。HarmonyOS NEXT(纯血鸿蒙)完全去除了 AOSP 代码,不再支持 Android 应用,是鸿蒙生态的独立版本。

核心概念:

  • 1+8+N 战略:1 手机为核心,8 类终端(平板/PC/手表/耳机/眼镜/车机/智慧屏/音箱),N 个生态设备
  • 分布式软总线:多设备融合为超级终端,统一通信基础
  • 分布式数据管理:跨设备数据同步与共享
  • 分布式任务调度:跨设备 Ability 调用与迁移
  • 一次开发多端部署:一套代码适配多设备形态

系统架构分层:

┌──────────────────────────────────────────────────┐
│                 应用层 (Application)               │
│  系统应用 │ 第三方应用 │ 元服务(Atomic Service)     │
├──────────────────────────────────────────────────┤
│               框架层 (Framework)                   │
│  ┌──────────┬──────────┬──────────┬───────────┐  │
│  │  ArkUI   │  ArkTS   │ Ability  │  分布式    │  │
│  │ 声明式UI │ 开发语言  │ 框架     │  基础设施  │  │
│  ├──────────┼──────────┼──────────┼───────────┤  │
│  │  多媒体  │  网络    │  数据    │  安全      │  │
│  │  框架    │  框架    │  管理    │  基础设施  │  │
│  └──────────┴──────────┴──────────┴───────────┘  │
├──────────────────────────────────────────────────┤
│             系统服务层 (System Services)            │
│  ┌────────┬────────┬────────┬────────┬────────┐  │
│  │窗口管理│包管理  │分布式  │图形栈  │媒体服务│  │
│  │通知管理│帐号管理│数据管理│编译运行│通信服务│  │
│  └────────┴────────┴────────┴────────┴────────┘  │
├──────────────────────────────────────────────────┤
│               内核层 (Kernel)                      │
│  ┌──────────────┬───────────────────────────┐    │
│  │ Linux Kernel │  HarmonyOS Micro Kernel   │    │
│  │ (标准设备)    │  (轻量设备)               │    │
│  └──────────────┴───────────────────────────┘    │
└──────────────────────────────────────────────────┘

HarmonyOS NEXT 核心变化:

对比项HarmonyOS 4.xHarmonyOS NEXT
内核AOSP + OpenHarmony纯 OpenHarmony
Android 应用兼容不支持
开发语言Java/Kotlin + ArkTS仅 ArkTS
运行时ART + 方舟引擎仅方舟引擎
应用格式APK + HAP仅 HAP
生态Android + 鸿蒙纯鸿蒙

技术特性:

  • 分布式软总线:设备自动发现、认证、组网,构建虚拟超级终端
  • 分布式数据管理:跨设备数据自动同步,应用无感知
  • 分布式任务调度:远程启动 Ability、跨设备迁移
  • 一次开发多端部署:响应式布局 + 断点系统适配多设备

Why — 为什么

适用场景:

  • 华为生态应用开发(国内市场必需)
  • 多设备协同场景(手机+手表+车机)
  • 元服务/卡片开发(免安装即用即走)
  • 国产化替代需求(政务、企业)

对比 Android/iOS 开发:

维度HarmonyOS NEXTAndroidiOS
开发语言ArkTSKotlin/JavaSwift
UI 框架ArkUI (声明式)Jetpack ComposeSwiftUI
IDEDevEco StudioAndroid StudioXcode
应用格式HAPAPKIPA
跨设备原生支持需自行实现需自行实现
分布式内置能力
卡片/元服务原生支持App WidgetWidgetKit
生态成长中成熟成熟
目标市场中国为主全球全球

优缺点:

  • ✅ 优点:
    • 原生分布式能力,多设备协同无缝
    • ArkTS 基于 TypeScript,前端开发者友好
    • 声明式 UI(ArkUI),开发效率高
    • 方舟引擎 AOT 编译,性能优秀
    • 免安装元服务,分发更灵活
    • 华为设备市场占有率高(国内)
  • ❌ 缺点:
    • 生态仍在成长期,第三方库不如 Android/iOS 丰富
    • 仅限华为设备,无法覆盖其他品牌
    • 国际化支持有限
    • 学习资源相对较少
    • 调试工具链不如 Android/iOS 成熟

How — 怎么用

1. DevEco Studio 安装与配置

# 下载 DevEco Studio
# https://developer.huawei.com/consumer/cn/deveco-studio/

# 系统要求
# Windows 10/11 64位 或 macOS 12+
# 内存:16GB+ 推荐
# 磁盘:10GB+ 可用空间

# 安装步骤
# 1. 下载并安装 DevEco Studio
# 2. 启动后安装 HarmonyOS SDK
# 3. 配置 Node.js(DevEco 内置或指定路径)
# 4. 登录华为开发者账号
# 5. 配置签名证书

2. 项目创建与结构

# 创建项目
# DevEco Studio → File → New → Create Project
# 选择模板:Empty Ability (Stage 模型)

项目结构:

MyApp/
├── entry/                          # 主模块
│   ├── src/
│   │   ├── main/
│   │   │   ├── ets/               # ArkTS 源码
│   │   │   │   ├── entryability/  # Ability
│   │   │   │   │   └── EntryAbility.ets
│   │   │   │   ├── pages/         # 页面
│   │   │   │   │   └── Index.ets
│   │   │   │   ├── model/         # 数据模型
│   │   │   │   ├── viewmodel/     # 视图模型
│   │   │   │   ├── common/        # 公共组件/工具
│   │   │   │   └── utils/         # 工具函数
│   │   │   ├── resources/         # 资源文件
│   │   │   │   ├── base/
│   │   │   │   │   ├── element/   # 颜色/字符串等
│   │   │   │   │   │   ├── color.json
│   │   │   │   │   │   └── string.json
│   │   │   │   │   ├── media/     # 图片
│   │   │   │   │   └── profile/   # 配置
│   │   │   │   ├── en_US/         # 英文资源
│   │   │   │   └── zh_CN/         # 中文资源
│   │   │   └── module.json5       # 模块配置
│   │   └── ohosTest/             # 测试
│   ├── build-profile.json5        # 构建配置
│   ├── hvigorfile.ts              # 构建脚本
│   └── oh-package.json5           # 依赖配置
├── build-profile.json5            # 项目级构建配置
├── hvigorw                        # 构建工具
├── oh-package.json5               # 项目依赖
└── oh_modules/                    # 依赖包

3. Stage 模型 vs FA 模型

对比项Stage 模型(推荐)FA 模型(旧版)
Ability 类型UIAbility + ExtensionAbilityPage + Service + Data
生命周期WindowStage 管理Page 独立管理
多实例支持不支持
后台任务BackgroundTaskManager无统一管理
数据共享DataShareExtensionAbilityData Ability
前景/后台onForeground/onBackgroundonShow/onHide
推荐程度✅ 官方推荐❌ 逐步弃用

4. Ability 生命周期

import { UIAbility, AbilityConstant, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';

export default class EntryAbility extends UIAbility {
  // 1. Ability 创建时调用
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    console.log('Ability onCreate');
    // 初始化数据、读取参数
  }

  // 2. WindowStage 创建后调用
  onWindowStageCreate(windowStage: window.WindowStage): void {
    console.log('WindowStage create');
    // 加载主页面
    windowStage.loadContent('pages/Index', (err, data) => {
      if (err.code) {
        console.error('Failed to load content: ' + JSON.stringify(err));
        return;
      }
    });
  }

  // 3. Ability 可见时调用(前台)
  onForeground(): void {
    console.log('Ability onForeground');
    // 恢复任务、刷新数据
  }

  // 4. Ability 不可见时调用(后台)
  onBackground(): void {
    console.log('Ability onBackground');
    // 暂停任务、保存状态
  }

  // 5. WindowStage 销毁时调用
  onWindowStageDestroy(): void {
    console.log('WindowStage destroy');
    // 释放 WindowStage 资源
  }

  // 6. Ability 销毁时调用
  onDestroy(): void {
    console.log('Ability onDestroy');
    // 释放所有资源
  }
}

生命周期流程:

onCreate → onWindowStageCreate → onForeground
    ↑                                  │
    │                                  ↓
    │                           onBackground
    │                                  │
    │         (前后台切换循环)          ↓
    │                           onForeground
    │                                  │
    ↓                                  ↓
onDestroy ← onWindowStageDestroy ← onBackground

5. 应用配置文件

// entry/src/main/module.json5
{
  "module": {
    "name": "entry",
    "type": "entry",                    // entry(主模块) / feature / har(库)
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [                     // 支持的设备类型
      "phone",
      "tablet",
      "2in1"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,           // 是否免安装(元服务设为 true)
    "pages": "$profile:main_pages",      // 页面路由配置
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "description": "$string:ability_desc",
        "icon": "$media:app_icon",
        "label": "$string:ability_label",
        "startWindowIcon": "$media:start_icon",
        "startWindowBackground": "$color:start_bg",
        "exported": true,                // 是否可被其他应用调用
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ]
      }
    ],
    "requestPermissions": [              // 权限声明
      {
        "name": "ohos.permission.INTERNET"
      },
      {
        "name": "ohos.permission.LOCATION",
        "reason": "$string:location_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      }
    ]
  }
}
// AppScope/app.json5
{
  "app": {
    "bundleName": "com.example.myapp",
    "vendor": "example",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name"
  }
}

6. 第一个页面

// pages/Index.ets
@Entry
@Component
struct Index {
  @State message: string = 'Hello HarmonyOS'

  build() {
    Column() {
      Text(this.message)
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
        .margin({ bottom: 20 })

      Button('Click Me')
        .width('60%')
        .height(48)
        .fontSize(18)
        .onClick(() => {
          this.message = 'Welcome to HarmonyOS!'
        })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }
}

7. 应用签名与调试

# 生成签名证书
# DevEco Studio → Build → Generate Key and CSR

# 配置签名
# File → Project Structure → Project → Signing Configs
# 选择自动签名(Automatically generate signature)

# 真机调试
# 1. 华为开发者账号登录
# 2. 设备开启开发者模式(设置 → 关于手机 → 连点版本号7次)
# 3. USB 连接设备
# 4. DevEco Studio 选择设备运行

# 模拟器
# DevEco Studio → Tools → Device Manager
# 创建远程模拟器(Remote Emulator)或本地模拟器

8. 应用发布

# 构建发布包
# Build → Build Hap(s)/APP(s) → Build APP(s)

# 发布流程
# 1. 在 AppGallery Connect 创建应用
# 2. 上传 .app 文件
# 3. 填写版本信息和发布说明
# 4. 提交审核
# 5. 审核通过后发布

常见问题与踩坑

问题原因解决方案
SDK 下载慢华为 CDN 海外节点使用国内网络/VPN
模拟器启动失败系统资源不足关闭其他应用,确保 8GB+ 内存
真机无法调试未开启开发者模式设置中连点版本号7次
签名失败证书/Profile 过期重新生成签名配置
包名冲突bundleName 已被注册使用唯一包名
权限被拒未声明或未动态申请module.json5 声明 + 代码动态申请
ArkTS 语法报错使用了 TS 动态特性查阅 ArkTS 限制清单

最佳实践

  • 使用 Stage 模型开发新项目
  • ArkTS 遵循严格类型,避免 any 和动态特性
  • 多设备适配用响应式布局 + 断点系统
  • 资源文件用 $r/$rawfile 引用,不硬编码
  • 权限最小化原则,按需申请
  • 优先使用系统能力 API(@kit.*)
  • 遵循 HarmonyOS 设计规范

面试题

Q1: HarmonyOS NEXT 和之前的 HarmonyOS 有什么核心区别?

核心区别是完全去除了 AOSP 代码,不再兼容 Android 应用。HarmonyOS 4.x 基于 AOSP + OpenHarmony 双框架,可以运行 Android 应用(APK);HarmonyOS NEXT 纯基于 OpenHarmony,应用格式统一为 HAP,开发语言统一为 ArkTS,运行时统一为方舟引擎。这意味着 HarmonyOS NEXT 是完全独立的操作系统,不依赖任何 Android 组件,所有应用都需要使用鸿蒙 SDK 重新开发。

Q2: Stage 模型和 FA 模型有什么区别?为什么推荐 Stage 模型?

Stage 模型以 UIAbility 为核心,一个 Ability 对应一个 WindowStage(窗口舞台),可以加载多个页面,支持多实例、前后台统一管理。FA 模型以 Page 为核心,每个 Page 独立管理窗口和生命周期,不支持多实例。Stage 模型优势:①UIAbility + ExtensionAbility 分离,职责更清晰;②WindowStage 统一管理窗口,支持多窗口;③BackgroundTaskManager 统一管理后台任务;④DataShareExtensionAbility 标准化数据共享;⑤支持应用接续(Continuation)。官方推荐新项目使用 Stage 模型,FA 模型将逐步弃用。

Q3: 鸿蒙的分布式能力有哪些?如何实现”一次开发多端部署”?

四大分布式能力:①分布式软总线——设备自动发现、认证、组网,构建超级终端;②分布式数据管理——跨设备数据自动同步,应用无感知;③分布式任务调度——远程启动 Ability、跨设备迁移;④分布式文件系统——跨设备文件共享访问。一次开发多端部署的实现:响应式布局(breakpoint 断点系统 sm/md/lg)适配不同屏幕;多态组件根据设备类型自动调整;资源限定词(resources 目录下按设备类型分发);工程级多 HAP 部署(phone HAP + tablet HAP 共享公共 HAR)。

Q4: ArkTS 和 TypeScript 有什么关系?前端开发者学 ArkTS 需要注意什么?

ArkTS 是华为基于 TypeScript 扩展的语言,保留了 TS 的基本语法和类型系统,但增加了严格限制:①禁止 any 类型;②禁止 eval/with 等动态特性;③强制类型注解;④限制原型链操作;⑤新增装饰器体系(@Component/@State/@Prop 等)。前端开发者注意事项:①不能用 any,所有变量必须明确类型;②不能用 eval/Function 动态执行代码;③对象属性必须先声明后使用;④类不能动态添加属性;⑤使用装饰器而非 React Hooks 的思维;⑥异步用 Promise/async-await,和 TS 一致;⑦集合类型用 Array/Set/Map,和 JS 类似。

Q5: 鸿蒙应用和元服务有什么区别?

应用(Application)是传统的安装式应用,有桌面图标,通过 AppGallery 下载安装。元服务(Atomic Service)是免安装的轻量服务,没有桌面图标,通过服务卡片(Widget)、扫码、搜索等方式发现和使用。核心区别:①安装方式——应用需下载安装,元服务即用即走免安装;②入口——应用有图标,元服务通过卡片/URL 发现;③包大小——元服务限制更严格(2MB 以内推荐);④能力——元服务部分 API 受限;⑤分发——元服务通过服务分发,不需要应用市场审核上架。元服务适合工具类、查询类、快捷操作类场景。

Q6: 鸿蒙的应用配置文件 module.json5 和 app.json5 各自负责什么?

app.json5 是应用级配置,位于 AppScope 目录,定义应用全局信息:bundleName(包名)、vendor(开发者)、versionCode/versionName(版本号)、应用图标和名称。module.json5 是模块级配置,位于每个模块的 src/main 目录,定义模块信息:模块名称/类型(entry/feature/har)、支持的设备类型(deviceTypes)、Ability 声明(abilities 数组)、权限声明(requestPermissions)、页面路由(pages)。一个应用可以有多个模块(entry + feature),每个模块有自己的 module.json5。

Q7: 鸿蒙的权限管理机制是怎样的?

鸿蒙权限分三级:①normal 级——安装时自动授权(如 INTERNET);②system_basic 级——需要用户动态授权(如 LOCATION、CAMERA),首次使用时弹窗询问;③system_core 级——仅系统应用可用(如 INSTALL_BUNDLE)。使用流程:在 module.json5 的 requestPermissions 声明所需权限 → normal 级自动授权 → system_basic 级在代码中调用 requestPermissionsFromUser 动态申请 → 用户同意后获得权限。权限原则:最小化声明(只申请必要权限)、按需申请(使用时才申请)、说明原因(reason 字段解释用途)。

Q8: 鸿蒙对前端开发者的友好程度如何?有哪些优势和挑战?

友好程度较高。优势:①ArkTS 基于 TypeScript,前端开发者能快速上手;②ArkUI 声明式范式类似 React/Vue,思维模式接近;③CSS-like 样式属性(fontSize/fontWeight/margin/padding)降低学习成本;④组件化开发与 React/Vue 一致。挑战:①装饰器体系(@State/@Prop/@Link)与 React Hooks 思维不同;②严格类型限制禁止 any,需适应更严格的类型约束;③状态管理模型(单向/双向同步)与 React 单向数据流不同;④调试工具链不如 Web DevTools 成熟;⑤生态库不如 npm 丰富,很多功能需自己实现;⑥文档以中文为主,英文资源少。


相关链接: