应用程序包

  • 应用所对应的软件包文件,称为“应用程序包”
  • 系统提供了应用程序包开发、安装、查询、更新、卸载的管理机制
  • 系统还屏蔽了不同的芯片平台的差异

多Module设计机制

模块化开发

  • 应用通常会包含多种功能,将每个功能模块作为一个独立的Module进行开发
  • 可以包含源代码、资源文件、第三方库、配置文件等
  • Module可以独立编译,实现特定的功能
Module类型 说明
Ability类型 1. 每一个Ability类型的Module编译后,会生成一个以.hap为后缀的文件
2. HAP包可以独立安装和运行,是应用安装的基本单位,一个应用中可以包含一个或多个HAP包
3.1. entry类型的Module:编译后生成entry类型的HAP。每一个应用分发到同一类型的设备上的应用程序包,只能包含唯一一个entry类型的HAP
3.2. 编译后生成feature类型的HAP。一个应用中可以包含一个或多个feature类型的HAP,也可以不包含。
Library类型的Module 1. 实现代码和资源的共享
2.1 Static Library:静态共享库。编译后会生成一个以.har为后缀的文件,即静态共享包HAR(Harmony Archive)
2.2 Shared Library:动态共享库。编译后会生成一个以.hsp为后缀的文件,即动态共享包HSP(Harmony Shared Package)

多设备适配

Stage模型概述

概述

Stage模型是

  1. Stage模型中,多个应用组件共享同一个ArkTS引擎实例,在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。[1]
  2. Stage模型提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。

设计思路

整体结构

Stage模型

各类组件

Satge模型提供UIAbility和ExtensionAbility两种组件,有具体类承载,支持面向对象。
其中,UIAbility、ExtensionAbility等组件详情如下:

UIAbility组件

  • 包含UI的应用组件,主要用于和用户交互
  • 生命周期只包含创建/销毁/前台/后台等状态

ExtensionAbility组件

  • 面向特定场景的应用组件
  • 需要使用ExtensionAbility的派生类
  • ExtensionAbility派生类实例由用户触发创建,并由系统管理生命周期

WindowStage类

  • 与显示相关的状态通过WindowStage的事件暴露给开发者
  • 每个UIAbility类实例都会与一个WindowStage类实例绑定
  • 提供了应用进程内窗口管理器的作用
  • 包含一个主窗口。UIAbility通过WindowStage持有了一个主窗口,该主窗口为ArkUI提供了绘制区域

Context

  • Context及其派生类向开发者提供在运行期可以调用的各种资源和能力
  • UIAbility组件和各种ExtensionAbility派生类都有各自不同的Context类

AbilityStage

  • 每个Entry类型或者Feature类型的HAP在运行期都有一个AbilityStage类实例
  • HAP中的代码首次被加载到进程中的时候,系统会先创建AbilityStage实例
  • 每个在该HAP中定义的UIAbility类,在实例化后都会与该实例产生关联
  • 可通过AbilityStage获取该HAP中UIAbility实例的运行时信息

Stage模型开发流程

相关概念补充

HAP(Harmony Ability Package)

  • 应用安装与运行的单元
  • 将code、resources、config、std library等打包为模块
  • 分为entry(应用入口、基础功能)和feature(动态特性)两类
  • 单个HAP(无ExtensionAbility):1个Entry+m个feature。推荐1个UIAbility+m个页面
  • 多个HAP:n个Entry+m个feature。每个HAP1个UIAbility或ExtensionAbility

HAR(HarmonyOS Ability Resource)[2]

  • 静态共享包,用于封装和共享代码、资源和第三方库,允许开发者将独立的功能模块打包并发布为一个可重用的单元
  • 不仅可以包含代码文件,还可以包括UI布局、图片、配置文件、第三方库等资源
  • 实现代码的模块化和复用

HSP(Harmony Shared Package)

  • 动态共享包
  • 与宿主应用同进程、命名空间、生命周期

参考文献: