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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403229.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDF转markdown工具:magic-pdf

1. magic-pdf 环境安装 conda create -n MinerU python3.10 conda activate MinerU pip install boto3>1.28.43 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install magic-pdf[full]0.7.0b1 --extra-index-url https://wheels.myhloli.com -i https://pypi.tuna.t…

《深入浅出多模态》(八)多模态经典模型:MiniGPTv4

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

【el-table】横向滚动条加粗后,滚动到固定列下被遮挡,已解决

横向滚动条按要求加粗后,遇到的问题:列表的操作列是固定在最右侧的,当滚动条滑动到最右侧的时候,滚动条被遮挡了 我尝试了几种方法都不行,比如找到.el-table__fixed-right .el-table__fixed-footer-wrapper &#xff…

智能监控,无忧仓储:EasyCVR视频汇聚+AI智能分享技术为药品仓库安全保驾护航

随着科技的飞速发展,药品仓库的安全管理正迎来前所未有的变革。药品作为直接关系到公众健康的重要物资,其安全存储和监管显得尤为重要。在这个背景下,视频汇聚平台EasyCVR视频智能管理系统的应用,为药品仓库的安全监管提供了强有力…

el-tree树状控件,定位到选中的节点的位置

效果图 在el-tree 控件加 :render-content"renderContent" 在掉接口的方法中 实际有用的是setTimeout 方法和this.$refs.xxxxxx.setCheckedKeys([industrycodeList]) if(res.data.swindustrylist.length>0){res.data.swindustrylist.forEach(item > {industry…

Ubuntu | 解决 VMware 中 Ubuntu 虚拟机磁盘空间不足问题

目录 一、存在的问题二、解决的步骤第一步:扩展磁盘空间第二步:查看磁盘空间使用情况第三步:安装分区工具第四步:启动分区工具第五步:修改挂载文件夹的读写权限第六步:扩展文件系统大小第七步:验…

【文献阅读】2024 DAVE 基于密度检测

摘要、图、模型架构 提出什么模块 解决什么问题 摘要 Low-shot counters estimate the number of objects corresponding to a selected category, based on only few or no exemplars annotated in the image. The current state-ofthe-art estimates the total counts as th…

【Harmony OS 4.0】待办列表案例

src/main/ets/example1/Models.ets // 定义class类数据模型 export class TaskDataModel {// private 私有属性&#xff0c;在类对象外不允许随意更改数据&#xff0c;必须本地初始化。private tasks: Array<string> [早起晨练, 准备早餐, 阅读名著, 学习ArkTs, 玩游戏…

电子电气架构 --- 车载以太网

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

Python 全栈系列262 使用sqlalchemy(clickhouse)

说明 再补充一篇。之前连不上的原因也挺搞笑&#xff0c;大概是deepseek把我带偏了&#xff0c; 应该是 pip3 install clickhouse-sqlalchemy -i https://mirrors.aliyun.com/pypi/simple/ 但是它教我 pip3 install sqlalchemy-clickhouse -i https://mirrors.aliyun.com/py…

【实用工具】使用Chrome插件搭建第二大脑!SuperMemory大语言模型登场,开源、免费、保存你需要的所有网站!——含入门安装教程

文章目录 项目简介项目搭建主要功能How do I use this?本地部署 项目简介 最近&#xff0c;有一款Github项目十分火爆&#xff0c;它专注于用超级内存打造自己的第二大脑。它是书签的 ChatGPT&#xff0c;基于Chrome 浏览器扩展导入推文或保存网站和内容&#xff0c;你可以访…

【计算机人接私活】手把手教你上手挖到第一个漏洞,从底薪3k到月入过万,只有一步之遥!

计算机人想接靠谱的私活&#xff1f;看这篇&#xff01; 暑假想做兼职赚生活费&#xff1f;看这篇&#xff01; 挖漏洞找不到门路&#xff1f;看这篇&#xff01; 挖漏洞必备工具 Up入行网安多年&#xff0c;一直在探索副业项目。 从最初的月薪5k&#xff0c;到现在一个漏…

基于javaEE的校园二手书交易平台的设计与实现

TOC springboot287基于javaEE的校园二手书交易平台的设计与实现 第1章 绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这个…

EWM 批次管理 / Batch Management

目录 1 简介 2 业务数据 2.1 基于 PO&#xff0c;创建 ERP LE - Delivery 内向交货单&#xff0c;同时同步到 EWM 交货单 2.2 在 EWM 内向交货单&#xff0c;创建批次。EWM 批次创建的前提条件来自于物料主数据批次分类&#xff08;023&#xff09;决定的。SAP 提供的标准条…

【数据结构】二叉树(三)精选Oj题

本篇已经是二叉树第三篇啦&#xff0c;下面讲解相关面试题&#xff0c;写作不易&#xff0c;求路过的朋友给个点赞与收藏呀~ 目录 1、相同的树 2、另一颗树的子树 3、翻转二叉树 4、对称二叉树 5、平衡二叉树 6、构建二叉树 7、二叉树的最近公共祖先 孩子双亲解法 二叉…

大端存储与小端存储

大端存储与小端存储 什么大端存储什么是小端存储 大端存储&#xff08;Big-endian&#xff09;和小端存储&#xff08;Little-endian&#xff09;是计算机科学中数据在内存中存储的两种不同方式&#xff0c;主要涉及多字节数据类型&#xff08;如整数、浮点数&#xff09;的字…

vue3 组合式 API:setup()

查看vue3官网介绍&#xff1a;组合式 API&#xff1a;setup() 在 Vue 3 中&#xff0c;组合式 API 的 setup() 函数是一个非常重要的特性&#xff0c;它提供了一种更灵活和可维护的方式来组织组件的逻辑。 基本概念 setup() 函数是在组件实例创建之前执行的&#xff0c;它用于…

零基础STM32单片机编程入门(三十八) 多传感器模块之跌倒检测实战源码

文章目录 一.概要二.实验原理三.实验控制流程四.STM32单片机跌倒监测实验(MPU6050直流有刷电机蜂鸣器)五.CubeMX工程源代码下载六.实验效果视频七.小结 一.概要 据统计每年约有 300 万老年人因跌倒受伤而在急诊室接受治疗&#xff0c;每五次跌倒就有一次会造成伤害&#xff0c…

网络如何发送一个数据包

网络如何发送一个数据包 网络消息发送就是点一点屏幕。 骚瑞&#xff0c;这一点都不好笑。&#xff08;小品就是我的本质惹&#xff09; 之前我就是会被这个问题搞的不安宁。是怎么知道对方的IP地址的呢&#xff1f;怎么知道对方的MAC呢&#xff1f;世界上计算机有那么多&…

阿里Qwen2开源大模型本地部署及调试全攻略

阿里Qwen2开源大模型本地部署及调试全攻略 #Qwen2系列大模型性能卓越&#xff0c;超越业界知名模型。开源后受到AI开发者关注&#xff0c;支持多种语言&#xff0c;提升多语言理解。在预训练和微调上优化&#xff0c;实现智能水平提升。Qwen2系列模型在各项能力上均领先&#…