鸿蒙 构建系统:Hvigor生命周期与工程结构(一)

开发中,构建系统是编译打包的核心。Hvigor是鸿蒙的编译构建系统,了解其生命周期可以更好地理解构建流程、排查构建问题。
一、工程结构
Hvigor将工程解析为一个树形结构:
| 节点类型 | 说明 |
|---|---|
| 项目(根节点) | 树的根节点 |
| 模块(叶子节点) | 项目中的每个模块为叶子节点 |
特点:树最多为两层,模块中不能包含其他模块。在Hvigor的定义中统称项目或模块为一个node(节点)。
工程级build-profile.json5文件和hvigorconfig.ts文件均可以配置多模块。
二、Hvigor脚本文件
Hvigor使用两个脚本文件来完成插件、任务以及生命周期hook的注册:
| 脚本文件 | 位置 | 作用 | 是否必需 |
|---|---|---|---|
| hvigorconfig.ts | 项目根目录(仅一份) | 在Hvigor生命周期刚开始时操作某些数据 | 可选(默认不存在,可自行创建) |
| hvigorfile.ts | 每个node下一份 | 注册插件、任务以及生命周期hook等操作 | 必需 |
说明:hvigorconfig.ts被解析执行的时间较早,默认不存在,如有需要可自行创建。
三、任务与任务依赖图
任务(Task)是Hvigor构建过程中的基本工作单元,它定义了构建项目时需要执行的具体工作。任务可以完成多种操作,比如:
-
源码编译任务
-
打包任务
-
签名任务
任务执行逻辑
| 组成部分 | 说明 |
|---|---|
| 任务执行逻辑 | 由插件(plugin)提供 |
| 默认任务逻辑 | 由hvigor-ohos-plugin提供 |
| 定制任务逻辑 | 可个性化定制 |
任务依赖图
任务之间存在依赖关系,Hvigor在执行任何任务之前会构建任务依赖图,所有任务会形成一个有向无环图(DAG)。
说明:hvigor-ohos-plugin和hvigorfile.ts文件中的构建脚本都将通过任务依赖机制对任务依赖图做出影响。
四、hvigor-ohos-plugin插件
4.1 插件作用
hvigor-ohos-plugin是默认的构建插件,为任务(Task)的完成提供业务逻辑支持,比如:
| 任务类型 | 说明 |
|---|---|
| HAP打包服务 | 打包HAP |
| HAR打包服务 | 打包HAR |
| HSP打包服务 | 打包HSP |
4.2 Hvigor与hvigor-ohos-plugin的关系
| 角色 | 职责 |
|---|---|
| Hvigor | 提供任务注册编排、配置管理等任务管理机制,控制任务的执行流程 |
| hvigor-ohos-plugin | 提供每一个任务的具体业务逻辑 |
五、Hvigor生命周期
Hvigor的编译构建过程分为三个不同的阶段,按顺序运行:
初始化阶段 → 配置阶段 → 执行阶段
初始化阶段
主要目的:初始化项目的编译参数,构造出项目结构的树形数据模型。
执行流程:
| 步骤 | 说明 |
|---|---|
| 1 | 根据命令参数和hvigor-config.json5配置,设置构建参数,构造hvigor对象和hvigorConfig对象 |
| 2 | 通过根目录下的build-profile.json5文件,创建rootNodeDescriptor实例,通过modules字段初始化所有模块的NodeDescriptor实例 |
| 3 | 执行项目根目录下的hvigorconfig.ts文件(如果存在) |
| 4 | 根据节点描述对象构造出每个节点的HvigorNode对象实例 |
说明:hvigor对象贯穿整个生命周期,从创建到构建结束才销毁。
配置阶段
主要目的:为每个node加载插件(plugin)、任务(task)和构造DAG图。
执行流程:
| 步骤 | 说明 |
|---|---|
| 1 | 执行每个node中的hvigorfile.ts文件,为每个node添加插件(向Hvigor注册任务),执行插件的apply方法,添加插件上下文 |
| 2 | 根据加载的插件和任务,根据任务执行的依赖关系构造出DAG图 |
说明:配置阶段开始时,所有的node都已经加载完毕,但每个node中还没有加载插件、任务和DAG图。
执行阶段
执行内容:
| 规则 | 说明 |
|---|---|
| 执行选定的任务 | - |
| 任务执行顺序 | 由任务之间的依赖关系决定 |
| 任务执行方式 | 任务可以并行执行 |
六、生命周期Hook点
在Hvigor的生命周期中,提供了多个hook点供使用,便于在对应的时机调用某些逻辑。
使用方式:每个hook点的使用方式请参考官方的基础构建能力API文档。
更多推荐




所有评论(0)