当前位置: 首页 > backend >正文

【HarmonyOS Next之旅】DevEco Studio使用指南(三十二) -> 构建系统生命周期

目录

1 -> 工程结构定义

2 -> Hvigor脚本文件

3 -> 任务与任务依赖图

4 -> hvigor-ohos-plugin

4.1 -> Hvigor与hvigor-ohos-plugin的关系

5 -> Hvigor生命周期

5.1 -> 初始化

5.2 -> 配置

5.3 -> 执行

5.4 -> 生命周期及hook点


1 -> 工程结构定义

Hvigor将工程解析为一个树形结构,项目为树的根节点,项目中的每个模块为树的叶子节点,树最多为两层,模块中不能包含其他模块,在Hvigor的定义中统称项目或模块为一个node(节点)。

在构建最开始的初始化阶段,会通过以及工程级build-profile.json5文件中的配置来构造出一个树形结构存储项目的工程结构,工程级build-profile.json5文件和hvigorconfig.ts文件均可以配置多模块。

2 -> Hvigor脚本文件

构建的生命周期中Hvigor使用两个脚本文件来完成插件、任务以及生命周期hook的注册:

  • hvigorconfig.ts:此文件在整个项目中只有根目录下存在一份,不是构建必须的文件并且默认不存在,如有需要可自行创建,此文件被解析执行的时间较早,可用于在Hvigor生命周期刚开始时操作某些数据。
  • hvigorfile.ts:此文件在每个node下都有一份,是构建的必须文件,在此文件中可以注册插件、任务以及生命周期hook等操作。

3 -> 任务与任务依赖图

Hvigor是基于任务对项目进行自动化构建的,任务(Task)是Hvigor构建过程中的基本工作单元,它定义了构建项目时需要执行的具体工作。任务可以完成多种操作,比如源码编译任务,打包任务或签名任务等。每一种任务的执行逻辑由插件(plugin)提供,插件可以是由hvigor-ohos-plugin提供的默认任务逻辑,也可由您个性化定制。

需要注意的一点是,任务是存在依赖关系的,Hvigor在执行任何任务之前会构建任务依赖图,所有任务会形成一个有向无环图(DAG),如下示例图,任务之间的依赖关系用箭头进行表示:

hvigor插件(hvigor-ohos-plugin)和hvigorfile.ts文件中的构建脚本都将通过任务依赖机制对任务依赖图做出影响。

4 -> hvigor-ohos-plugin

hvigor-ohos-plugin是默认的构建插件,为任务(Task)的完成提供业务逻辑支持,比如为Hvigor提供Hap、Har和Hsp打包服务等任务,每一种任务的具体执行逻辑由本模块中不同的插件来提供。

4.1 -> Hvigor与hvigor-ohos-plugin的关系

Hvigor提供任务注册编排以及配置管理等任务管理机制,它负责控制任务的执行流程,但是并不包含每一个任务的具体业务逻辑,具体逻辑是由hvigor-ohos-plugin提供的。

Hvigor和hvigor-ohos-plugin的关系可以通过下图来说明,Hvigor接受任务的注册并编排任务执行顺序,并按照顺序依次调用hvigor-ohos-plugin中的插件来执行任务。如果定制了自己的任务逻辑插件并将其注册,hvigor-ohos-plugin也会调用您的个性化插件来完成编译构建流程。

在Hvigor执行构建的过程中,hvigor-ohos-plugin会向Hvigor进行任务的注册,Hvigor会根据构建的任务执行有向图依次调用对应的插件来执行相应任务,在完成编译、打包、签名等一系列任务后,Hvigor也就正式完成了构建。

5 -> Hvigor生命周期

生命周期展示了Hvigor编译构建系统如何进行一次完整的编译构建流程。Hvigor的编译构建过程有三个不同的阶段,分为初始化、配置和执行,Hvigor会按顺序运行这些阶段。

5.1 -> 初始化

说明

此阶段主要目的为初始化项目的编译参数,构造出项目结构的树形数据模型,每个node为一个HvigorNode对象。

  1. 根据命令参数和hvigor-config.json5文件中的配置,设置Hvigor的构建参数,并构造出hvigor对象和hvigorConfig对象:
    • hvigor对象贯穿整个hvigor生命周期,从最开始创建出来一直到此次构建结束才被销毁;
    • hvigorConfig对象用于表示hvigor对项目结构的抽象,是hvigor的简单配置对象,用于动态添加或删除节点,它也会保存对每个节点的描述对象(nodeDescriptor对象)。
  2. 通过项目根目录下的build-profile.json5文件,创建出rootNodeDescriptor实例,并通过其中的modules字段,来初始化出工程中所有模块的NodeDescriptor对象实例。
  3. 执行项目根目录下的hvigorconfig.ts文件,可以在此文件中通过hvigor的相关API来为生命周期注册hook或在构建开始时进行其他处理。
  4. 根据节点描述对象构造出每个节点的HvigorNode对象实例。

5.2 -> 配置

说明

此阶段开始时,所有的node都已经加载完毕,但每个node中还没有加载插件(plugin)、任务(task)和DAG图,此阶段的主要目的就是加载出这些内容。

  1. 执行每个node中的hvigorfile.ts文件,为每个node添加plugin(向Hvigor注册任务),执行plugin的apply方法,并添加plugin的上下文。
  2. 根据前一步加载出的plugin和task,根据任务执行的依赖关系构造出DAG图。

5.3 -> 执行

  • 执行选定的任务。
  • 任务之间的依赖关系决定了任务执行顺序。
  • 任务可以并行执行。

5.4 -> 生命周期及hook点

在Hvigor的生命周期中,以下多个hook点可供您使用,便于在对应的时机调用某些逻辑。

在下图中所有绿色标记的线框为可以使用的hook点。


感谢各位大佬支持!!!

互三啦!!!

http://www.xdnf.cn/news/13280.html

相关文章:

  • okhttp 实现长连接的完整方案
  • OpenLayers 获取地图状态
  • Docker 安装教程(CentOS 系统)纯新手可入门
  • wordpress后台更新后 前端没变化的解决方法
  • Java异步编程之消息队列疑难问题拆解
  • 2506C++,C++的时间库
  • 搭建本地瓦片地图服务器的完整指南
  • 脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
  • SCAU期末笔记 - 数据分析与数据挖掘题库解析
  • 使用 ML.NET Model Builder 训练机器学习模型进行预测性维护
  • 60天python训练计划----day50
  • 连锁超市冷库节能解决方案:如何实现超市降本增效
  • spring中的ImportSelector接口详解
  • 《高等数学》(同济大学·第7版)第四章第一节不定积分的概念与性质
  • 微软PowerBI考试 PL300-在 Power BI 中设计语义模型 【附练习数据】
  • C++11列表初始化:从入门到精通
  • Python学习(8) ----- Python的类与对象
  • 用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
  • LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
  • OpenGL-什么是软OpenGL/软渲染/软光栅?
  • 【求出100~500之间所有每位数的乘积大于每位数的和的数。】2022-4-16
  • c语言(持续更新)
  • 第三章支线四 ·事件风暴 · 时序与响应的协奏
  • LangGraph 深度解析:下一代AI应用编排引擎
  • 五大主流多智能体框架分析
  • DAY 26 函数专题1
  • 如何在Shopify中集成API
  • break 语句和 continue 语句
  • 基于ThinkPHP8.*的后台管理框架--Veitool框架学习使用
  • 免费批量抠图工具使用说明