1. 鸿蒙App包结构
1.1 应用/服务的发布形态
先看下华为开发文档中的介绍:
应用/服务的发布形态为APP Pack(Application Package,简称App),它是由一个或多个HAP(Harmony Ablity Package)包以及描述App Pack属性的pack.info文件组成。
在iOS系统可以理解为.ipa文件,在Android系统可以理解为.apk文件,但是上面又提到了HAP,这一点和iOS、Android又有什么不同呢?
1.2 HAP(Harmony Ablity Package)
一个HAP在工程目录中对应一个Module,其中包含代码、资源、第三方库及应用/服务配置文件组成。分为Entry和Feature两种类型:
- Entry:应用/服务的主模块,作为应用的入口,提供了应用的基础的功能;
- Feature:应用/服务的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装;
从上面对于HAP的描述来看,HAP可以理解为在鸿蒙官方提供的一种组件化方案,每一个应用/服务都必须有一个Entry类型的HAP,作为应用入口。另外,对于大型的应用/服务可以根据业务建立不同的Feature类型的HAP,选择性安装。
简单来说就是,简单的应用有一个Entry类型的HAP足以,复杂的应用可以考虑将业务拆成不同的Feature类型的HAP。
1.3 应用开发模型
不同的应用模型对应的工程目录会有所区别,这里先来了解下鸿蒙系统提供的应用模型。
应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象,它提供了应用程序必备的组件和运行机制。开发者可以基于一套统一的模型进行应用开发,使应用开发更简单、高效。
HarmonyOS应用模型的构成要素包括:
- 应用组件
- 是应用的基本组成单位,是应用的运行入口。可以理解为上面介绍的HAP;
- 应用进程模型
- 定义应用进程的创建和销毁方式,以及进程间的通信方式;
- 应用线程模型
- 定义应用进程内线程的创建和销毁方式、主线程和UI线程的创建方式、线程间的通信方式;
- 应用任务管理模型
- 负责管理模型定义任务(Mission)的创建和销毁方式,以及任务与组件间的关系;
- 应用配置文件
- 包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,用于提供给编译工具、应用市场和OS使用;
鸿蒙系统先后提供了两种应用模型:
- FA(Feature Ablity)模型:Harmony OS早期版本开始支持的模型,目前不再主推;
- Stage模型:HarmonyOS 3.1 Developer Preview版本新增的模型,目前主推。由于该模型中提供了AblityStage、WindowStage等类作为应用组件和Window窗口的舞台,所以称这种应用模型为Stage模型。
可能在某个时间点鸿蒙系统的设计大佬们发现当前的开发架构不足以支持复杂应用的开发,所以结合当时的设计架构提出了FA模型,然后又基于FA模型进行改进,形成了Stage模型。那之前的FA模型也不能丢呀,写在官方文档中既展示了鸿蒙系统的复杂性,又方便开发者们将两种应用模型进行对比,方便理解,哈哈😄
这里对于FA模型和Stage模型就不进入深入研究了,先有个大概理解即可,这篇文章的目的是介绍开发工程,之后再另起一篇文章学习下鸿蒙系统的两种应用开发模型。
1.4 Stage模型应用程序包结构
现在Stage应用模型是之后主推的,所以我们前期可以专注于这一种模型即可,包结构如下图所示:
从上面这个图中可以很清晰的理解前面对App Pack的介绍:
- 应用的发布形态是 xxx.app
- 一个app下可以有多个.hap:只能有一个Entry.hap,Feature类型的HAP可以有多个
- 应用有一个对应的pack.info文件
- 一个Module(.hap)都有自己的module.json文件,包含了Module的基本配置信息、应用组件信息和权限信息等等;
2.ArkTS工程目录结构(Stage模型)
2.1 工程目录介绍
ArkTS Stage模型支持API Version 9,以之前创建的hello world工程为例,其工程目录结构如下图所示:
- AppScope
- app.json5:存放应用的全局配置信息
- entry:应用/服务的入口模块,编译构建后会生成.hap
- src/main/ets:用于存放ArkTS源码
- src/main/ets/entryablity:应用/服务的入口
- src/main/ets/pages:应用/服务包含的页面
- src/main/resources:用于存放图片、媒体、字符串、布局文件等资源文件
- base/element:字符串、整型数、颜色、样式等json文件
- base/media:多媒体文件,图片、音视频等
- rawfile:用于存储任意格式的原始资源文件,需要指定文件路径和文件名进行引用
- scr/main/module.json5:模块对应的配置文件,包括HAP的配置信息、应用在设备上的配置信息以及应用的全局配置信息等;
- oh—modules:用于存放三方库依赖关系;
- build-profile.json5:当前模块的信息、编译信息配置项,包括buildOption、targets配置等
- hvigorfile.ts:模块级编译构建任务脚本
- oh-package.json5:配置三方包声明文件的入口及包名
- build-profile.json5:应用级配置信息,包括签名、产品配置等
- hvigorfile.ts:应用级编译构建任务脚本
2.2 切换工程视图
上面是我们创建鸿蒙应用默认的工程视图,其实DevEco也另外提供了Ohos(OpenHarmony Operating System)视图:
- 默认的工程视图:展示工程中实际的文件结构;
- Ohos视图:隐藏不常用的文件,将常用的文件进行重组展示,更简洁;
当工程创建或者打开之后,如果想从工程视图切换到Ohos视图,左上角 Project -> Ohos进行切换:
3. 新工程配置项
在了解完工程目录结构之后,我们再回过头来看下创建Hello world工程时需要填的一些配置项,上次我们都是默认的,这次来了解一下。
当我们选择创建工程并选取了Empty Ablity模板之后,会让我们配置工程的基本信息:
- Project Name:工程的名字
- Bundle name:应用的包名,用于标识应用的唯一性
- Save location:工程文件本地存储路径
- Compile SDK:应用/服务的目标API Version,DevEco Studio会根据指定的版本编译打包
- Model:应用开发模型,Stage or FA(API Version 4-8只支持FA)
- Enable Super Visual:支持低代码开发模式,部分模板支持低代码开发
- Language:开发语言
- Compatible SDK:兼容的最低API Version
- Device type:支持的设备类型
从这个配置项来说,和iOS、Android大同小异。
4. 添加/删除Module
上面提到一个应用中可以有一个或多个Module,并且每个Module都可以独立编译和运行,所以我们可以在工程中创建新的Module,Module又分为Ablity和Library两种类型。
- Ablity:构建应用的基本组件,负责实现应用的具体功能也业务逻辑;
- Library:是代码的集合,用于提供可复用的功能和资源,比如第三方库是以Library的形式提供的;
之前我们创建的Hello world工程只包括一个
4.1 在工程中添加Module
4.1.1 创建新的Module
两种方法:
- 在工程目录顶部,右键,选择New -> Module
- 选中工程目录中任意文件,然后菜单栏中选择File -> New -> Module
在弹出页面中,选择需要创建的模板:
配置Module的基本信息:
- Module name:模块名称
- Module type:因为当前已经有了Entry类型,所以只能是Feature类型
- Enable Super Visual:是否使用低代码开发方式
- Language:开发语言
- Device type:设备类型
配置Ablity信息:
- Ablity name:名称
- Exported:标识该Ablity是否可以被其它应用/服务调用
完成之后就可以在工程中看到该Module了,这里我创建的Module name为application:
删除的话就很简单了,直接在工程目录中选中该模块,右键删除即可。