鸿蒙开发Hvigor插件动态生成代码
发表于 2025-08-25 15:58:59

推广 | 鸿蒙应用开发者激励计划 2025 已发布,上架单个鸿蒙应用最高可获 1 万元现金激励!点击了解

踏入鸿蒙世界的敲门砖,标志着您在技术征途上的全新起点,提升就业竞争力,获得行业认可,点亮职业成长先机,快人一步抢占未来应用开发赛道!https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398?ha_source=hmosclass-bokeyuan&ha_sourceId=89000444

Hvigor 允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享。Hvigor 主要提供了两种方式来实现插件:基于 hvigorfile 脚本开发插件、基于 typescript 项目开发。下面以基于 hvigorfile 脚本开发插件进行介绍。

基于 hvigorfile 脚本开发

基于 hvigorfile.ts 脚本开发的方式,其优点是可实现快速开发,直接编辑工程或模块下 hvigorfile.ts 即可编写插件代码,不足之处是在多个项目中,无法方便的进行插件代码的复用和共享分发。

1、导入模块依赖。

2、编写插件代码。

在 hvigorfile.ts 中定义插件方法,实现 HvigorPlugin 接口。

3、在导出声明中使用插件。

使用 hvigorfile 插件动态生成 navigation 防混淆文件

我们在使用 navigation 的系统路由表时,每次添加新页面,都需要配置一下 release 环境防混淆。若将这些页面放在一个固定的目录下,则与我们的模块化设计相违背,若命名使用固定的前缀或后缀,总感觉有点多余,手动一个一个的添加,虽然符合我们的代码规范设计,但就是有点繁琐。有没有更方便的方式来处理这个混淆配置呢?

其实我们可以在写一个 hvigorfilew 插件来自动生成混淆配置文件。我们自定义一个 HvigorPlugin 任务,通过 OhosHapContext 对象读取 module.json5 文件中的 routerMap 字段,可以获取系统路由表的名称,再读取 profile 目录下的路由表。解析 json 文件内存,并将页面路径写到一个混淆文件中,这样每次编译时,自动生成防混淆文件,我们只需要引入这个文件就可以了。示例如下

编译后会在 entry 目录下生成 obfuscation-router.txt 防混淆文件,只要引入这个文件就可以了。

使用 hvigorfile 插件动态生成 navigation 页面枚举名称

我们在我们 navigation 的 push 跳转到新页面时,都得提前定义好系统路由表中的页面 name,因为使用的 name 与系统路由表中定义的 name 不相同时,跳转页面则会白屏。有了前面的经验,其它我们也可以动态生成一个 ets 文件,将系统路由表中的页面名称自动生成一个枚举,这样就不用每次配置系统路由表,还是复制一下名称了。例如我们的系统路由表是这样的

我们现在实现一个 hvigorfile 插件,来解析系统路由表中的 name 字段,并生成对应的枚举值。示例如下

我们在 ets 目录下生成了一个 Pages.ets 文件,并将所有 navigation 页面生成对应的枚举值,页面跳转时,使用这些枚举值就不怕出错了。Pages.ets 内容如下

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】