您的位置:首页 > 财经 > 产业 > HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils

HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils

2025/1/8 0:07:20 来源:https://blog.csdn.net/iotjin/article/details/141024179  浏览:    关键词:HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils

demo 地址: https://github.com/iotjin/JhHarmonyDemo
代码不定时更新,请前往github查看最新代码

HarmonyOS NEXT

  • 一、HAP & HSP & HAR介绍
    • HAP官方介绍
    • HAR官方介绍
    • HSP官方介绍
    • 怎么理解App、HAP、HAR的关系
    • HAR如何转换为HSP
    • HSP模块如何快速切换成HAR模块
  • 二、创建HSP/HAR模块
    • 1)创建module
    • 2)在新建的module下的src/main/ets目录下创建组件或utils
    • 3)在index.ets中导出这个utils
    • 4)在引用的module(这里是entry)引用和安装
    • 5)使用

参考:

鸿蒙——应用程序包HAP、HAR、HSP
鸿蒙系列–动态共享包的依赖与使用
鸿蒙原生APP开发学习(三)-多模块创建及跨模块页面跳转

一、HAP & HSP & HAR介绍

HAP官方介绍

HAP(Harmony Ability Package)是应用安装和运行的基本单元。HAP包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为两种类型:entry和feature。

  • entry:应用的主模块,作为应用的入口,提供了应用的基础功能。
  • feature:应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装。

应用程序包可以只包含一个基础的entry包,也可以包含一个基础的entry包和多个功能性的feature包。

HAR官方介绍

HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。

HSP官方介绍

HSP(Harmony Shared Package)是动态共享包,可以包含代码、C++库、资源和配置文件,通过HSP可以实现代码和资源的共享。HSP不支持独立发布,而是跟随其宿主应用的APP包一起发布,与宿主应用同进程,具有相同的包名和生命周期。

怎么理解App、HAP、HAR的关系

App是个上架概念,多个HAP打包一起上架。
HAP是可以独立运行、分发的,HAP不是复用的,复用的应该是HAR。
HAR是静态共享包,每个模块依赖的话都会打包到HAP里。

在这里插入图片描述

  • HSP的使用场景

1、多个HAP/HSP共用的代码和资源放在同一个HSP中,可以提高代码、资源的可重用性和可维护性,同时编译打包时也只保留一份HSP代码和资源,能够有效控制应用包大小。
2、HSP在运行时按需加载,有助于提升应用性能。
3、 同一个组织内部的多个应用之间,可以使用集成态HSP实现代码和资源的共享。

  • HSP旨在解决HAR存在的几个问题:

多个HAP引用相同的HAR,导致的APP包大小膨胀问题。
多个HAP引用相同的HAR,HAR中的一些状态变量无法共享的问题。

HAR如何转换为HSP

HAR转为HSP主要是通过相关配置文件的修改实现的。具体方式可参考以下步骤:

  • 1、在HAR的module.json5中,将type字段的值改为“shared”,并添加deliveryWithInstall字段配置为“true”。
  • 2、若HSP需要对外声明可跳转的页面,需要在module.json5文件中添加pages字段,并在“resources/base”目录下建立“profile/main_pages.json”文件,添加“src”配置。
  • 3、将HAR的hvigorfile.ts文件中的“harTasks”更改为“hspTasks”。
  • 4、HAR的build-profile.json5文件中默认生成consumerFiles字段,该项仅HAR可配置,为默认导出的混淆规则,需删除。

配置更改完成后即可重新编译。

HSP模块如何快速切换成HAR模块

具体方式可参考以下步骤:

  • 1.在HSP下的module.json5中,把"type": “shared"修改为"type”: “har”,删除"deliveryWithInstall"、"pages"字段;
  • 2.删除HSP中的页面,如果要以页面的形式使用到的话,就需要改为命名路由的写法;
  • 3.然后再找到HSP下的hvigorfile.ts文件,将里面的hspTasks改为harTasks;
  • 4.最后编译该模块即可。

如编译过程中遇到其他错误,按照提示找到对应位置修改即可。

二、创建HSP/HAR模块

项目有一个HAP主模块,需要新建一个模块用来放置项目公共的组件和utils,可以创建HAR类型(Static Library)或者HSP类型(Shared Library)的模块

1)创建module

这里用的HAR作为公共模块

在这里插入图片描述
请添加图片描述

创建后的文件

请添加图片描述
在这里插入图片描述

2)在新建的module下的src/main/ets目录下创建组件或utils

!!! 注意要export

在这里插入图片描述

import { util } from '@kit.ArkTS'export class JhCommonUtils {/// 生成UUIDpublic static generateUUID() {let uuid = util.generateRandomUUID(true);console.log("RFC 4122 Version 4 UUID:" + uuid.toString());return uuid;}
}export function add(a: number, b: number) {return a + b;
}

3)在index.ets中导出这个utils

在这里插入图片描述

// export { JhCommonUtils, add } from '../JhCommon/src/main/ets/JhCommon/utils/JhCommonUtils'
export * from '../JhCommon/src/main/ets/JhCommon/utils/JhCommonUtils'

4)在引用的module(这里是entry)引用和安装

  • 引用
    在这里插入图片描述
  • 安装

在右上角点击 sync now 或者 鼠标放到路径那里点击Run ohpm install都可以

在这里插入图片描述

5)使用

import { JhCommonUtils, add } from 'JhCommon';console.log(JhCommonUtils.generateUUID())
console.log(add(1, 2).toString())

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com