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())