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

news2024/12/23 17:55:08

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 {
  /// 生成UUID
  public 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.coloradmin.cn/o/2044106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaSE】基础知识复习(六)(不全)

1.File与IO流 File类就是代表系统的文件 / 目录,IO流是用来处理File类的 File类 构造器 分隔符(三种) 第三种File.separator是跨平台的,获取当前操作系统的分隔符 常用方法 length() 返回文件大小(字节),如果是目录&am…

EcoDev Studio 与 gitlab【拉取项目,切换分支,再修改提交】

1 安装git工具 https://blog.csdn.net/mukes/article/details/115693833 2 创建空项目 3 推送gitlab 1、进入本地该项目目录下,右键Git Bash Here打开git命令窗口 2、初始化本地仓库: git init将本地项目的所有文件添加到暂存区: git a…

EMC学习笔记2——电磁兼容问题分析

分析一个电磁兼容问题一般从三方面入手,分别是骚扰源、敏感源、耦合路径。解决掉其中一个问题,就能解决大部分的电磁兼容问题。 例如:当骚扰源是雷电时,敏感源是电子线路时,我们需要消除的就是耦合电路。 耦合路径就是…

吴恩达机器学习-C2W1L1-神经元和层

在本实验中,我们将探索神经元/单元和层的内部工作原理。特别地,这个实验将与你在课程1中掌握的模型,回归/线性模型和逻辑模型进行类比。本实验室将介绍Tensorflow,并演示如何在该框架中实现这些模型。 包 Tensorflow和Keras Te…

Ubuntu中编译使用ANTs(医学图像配准)含github无法访问问题解决

目录 第一步、修改hosts文件 1.打开https://github.com.ipaddress.com/ 2.打开https://fastly.net.ipaddress.com/github.global.ssl.fastly.net#ipinfo 3.打开hosts文件,并在文件末尾添加如下内容 第二步、编译ANTs 1)首先安装git、cmake以及c编译…

基于DVWA-Brute Force(LowMedium)的渗透测试

Brute force主要是通过爆破达到渗透目的&#xff1a; Low 查看源代码&#xff1a; <?phpif( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Get password$pass $_GET[ password ];$pass md5( $pass );// Check the database$query "SE…

流量分析0.o

[陇剑杯 2021]签到 此时正在进行的可能是__________协议的网络攻击。&#xff08;如有字母请全部使用小写&#xff0c;填写样例&#xff1a;http、dns、ftp&#xff09;。得到的flag请使用NSSCTF{}格式提交。 过滤协议 例子:tcp&#xff0c;udp&#xff0c;arp&#xff0c;i…

基于SpringBoot和Leaflet的全国省会城市风景区分布分析实践

目录 前言 一、空间数据表的设计与实现 1、城市信息数据表 2、风景区信息表设计与实现 3、数据库查询应用 二、WebGIS程序设计与实现 1、使用select中转义字符的使用 2、Leaflet空间信息展示 三、省会城市风景区可视化成果展示 1、哈尔滨市风景区分析 2、南京市风景区…

【6大设计原则】依赖倒置原则:构建灵活软件架构的基石 - 通过代码实例深入解析

1.引言 1.1为什么要学习依赖倒置原则 在软件开发过程中&#xff0c;我们经常需要对代码进行修改和扩展。如果代码之间的耦合度过高&#xff0c;那么在进行修改或扩展时&#xff0c;可能会对其他部分的代码产生影响&#xff0c;甚至引发错误。这就要求我们在编写代码时&#xf…

TransFormer学习的一些重要链接

以下是自己在学习和掌握TransFormer中的一些重要链接: 1. 这篇讲解的我看的最明白和清楚&#xff0c;但是仍要结合代码来加深理解。Transformer模型详解&#xff08;图解最完整版&#xff09;https://zhuanlan.zhihu.com/p/338817680 2. 七月在线-TransFormer的文本分类http…

LabVIEW多协议智能流水线控制与监控系统

在自动化流水线系统&#xff0c;实现对流水线传送带、机械臂、报警系统、扫码机、喷码机等设备的高效控制和实时监控。该系统需要支持多种通信协议&#xff0c;包括UDP、串口、ModbusTCP、HTTP、以及MQTT协议&#xff0c;以确保各个设备间的无缝连接和数据交换。 系统架构与模…

1-安装Elasticsearch

支持一览表 | Elastic 未完待续

postgres.new:在浏览器中构建与AI协作的开源Postgres沙盒

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

海量数据处理商用短链接生成器平台 - 16

第五十四章 DWM层数据处理-Flink异步IO提升性能 第1集 IP解析地理位置问题点和Flink异步IO介绍 简介&#xff1a; IP解析地理位置问题点和Flink异步IO介绍 Flink实时计算处理存在的问题 IP解析地理位置信息&#xff0c;查询是同步查询&#xff0c;存在阻塞&#xff0c;性能不…

Unity(2022.3.38LTS) - 旋转和方向

目录 一. 旋转 二. 方向 三. 总结 四. 扩展-万向锁 一. 旋转 在 Unity 中&#xff0c;物体的旋转可以通过欧拉角和四元数来表示和操作。 欧拉角&#xff1a; 由三个角度值&#xff08;通常表示为 x、y、z &#xff09;来定义旋转。直观易懂&#xff0c;但可能会出现万向…

楼宇控制与智能家居实训室解决方案

一、前言 随着物联网技术、大数据分析以及人工智能技术的不断进步&#xff0c;楼宇自动化和智能家居系统正逐渐改变我们的生活方式和工作方式。这些系统不仅可以提高建筑物的安全性和舒适度&#xff0c;还可以有效降低能耗并提升运营效率。例如&#xff0c;通过智能温控系统可…

无人机视角下的EasyCVR视频汇聚管理:构建全方位、智能化的AI视频监控网络

随着5G、AI、物联网&#xff08;IoT&#xff09;等技术的快速发展&#xff0c;万物互联的时代已经到来&#xff0c;视频技术作为信息传输和交互的重要手段&#xff0c;在多个领域展现出了巨大的应用潜力和价值。其中&#xff0c;EasyCVR视频汇聚平台与无人机结合的AI应用更是为…

快速开发知识付费软件的秘诀:敏捷开发与持续迭代

在竞争激烈的市场环境中&#xff0c;快速推出高质量的知识付费软件是抢占市场先机的关键。敏捷开发与持续迭代作为两种核心的软件开发方法&#xff0c;可以帮助开发团队在短时间内交付功能完善的产品&#xff0c;并通过不断优化来提升用户体验。本文将探讨如何利用敏捷开发与持…

OpenCV的编译(MinGW)

OpenCV的编译&#xff08;MinGW&#xff09; 一、下载opencv 在opencv的官网&#xff08;Releases - OpenCV&#xff09;下载我们需要的opencv的版本&#xff0c;以4.5.4版本为例&#xff1a; 之所以&#xff0c;使用这个4.5.4版本的编译&#xff0c;是因为我使用4.6.0版本的…

2024年8月15日(python管理MySQL数据库 mysql5.7读写分离 配置mycat)

一、pymysql管理数据库 1、搭建主mysql5.7 [rootmysql57 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootmysql57 ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootmysql57 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x…