【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解

news2025/3/31 6:07:52

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解

在这里插入图片描述
(图1-1)

一、鸿蒙中App、HAP、HAR、HSP是什么?


(1)App Pack(Application Package) 是应用发布的形态,上架应用市场是以App Pack形式上架。以 .app 后缀的文件,只能上架到应用市场,不能在设备上直接安装和运行。


(2)HAP(Harmony Ability Package) 是应用安装和运行的基本形态。

HAP的两种类型:
其主要分为两种类型:entry和feature:
1.entry 是应用的主模块,作为应用的入口,提供应用的基础功能,一个 App 中对于同一设备类型必须有且只有一个 entry 类型的 HAP,可独立安装运行。

2.feature 是应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装,一个 App 可以包含一个或多个 feature 类型的 HAP,也可以不含。

模块配置:
在feature模块的module.json5配置中,type有entry和feature两种值,设置为后者feature,就是feature模块。
并且deliveryWithInstall设置为false,为按需下载,用户需通过应用内引导或应用市场手动获取。

{
  "module": {
    "name": "application",
    "type": "feature",
    "description": "$string:module_desc",
    "mainElement": "ApplicationAbility",
    "deviceTypes": [
      "phone"
    ],
    "deliveryWithInstall": false,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
      {
        "name": "ApplicationAbility",
        "srcEntry": "./ets/applicationability/ApplicationAbility.ets",
        "description": "$string:ApplicationAbility_desc",
        "icon": "$media:layered_image",
        "label": "$string:ApplicationAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true
      }
    ]
  }
}

如上图(1-1)所示,feature模块主要是为了动态功能扩展,按需加载优化,跨设备适配三种效果。

例如,京东APP的直播模块,就可以设计为feature,用户点击直播入口才去加载,减小初始包大小。并且京东APP在车机和手表等不同设备上,可以适配硬件加载不同的feature模块。

不过需要注意的是,使用feature模块,需处理 Feature HAP 的加载时机、依赖关系及错误处理,避免因模块未下载导致功能不可用。(如首次使用时的网络请求和安装时间)。

feature HAP 是实现轻量化、动态化、跨设备应用的核心机制。一般是面试题目,要好好记住。


(3)HAR(Harmony Archive) 是静态共享包。说人话,HAR可以理解为SDK依赖,与HSP的区别在加载机制上。

多包(HAP/HSP)引用相同的HAR时,会造成多包间代码和资源的重复拷贝,从而导致应用包膨大。不过HAR 打包时全部打进引用方的 HSP/HAP 包中,可以节省安装和加载成本。

那为什么还需要HAR呢? 是因为加载效率高,HAR在编译时就被打包到依赖它的每个 HAP 中,在应用启动时就已经随 HAP 存在于内存中,后续使用时无需额外加载步骤 ,直接调用即可。

而 HSP 是动态共享包,运行时复用,在运行时按需加载,每次使用时都需要额外的查找、加载和初始化等操作,这些操作会消耗一定时间,导致加载效率降低。

并且如果我的HAR包并不会在很多HAP中引用,那做成HAR包的加载效率是比做成HSP包高很多。


(4)HSP(Harmony Shared Package) 是动态共享包,分为应用内HSP和集成态HSP。

详细区别,参加文档
【HarmonyOS Next】 鸿蒙应用useNormalizedOHMUrl详解

跳转到HSP模块中的一个页面,如何实现:
因为HSP中不能创建 UIAbility,那主模块entry下跳转到HSP模块中的页面需求实现如下:

import { router } from '@kit.ArkUI'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
 
 
 
struct Index { 
   message: string = '跳转到HSP页面'; 
 
  build() { 
    Row() { 
      Column() { 
        Button() { 
          Text(this.message) 
            .fontSize(24) 
        } 
        .onClick(() => { 
        // '@bundle:包名(bundleName)/模块名(moduleName)/路径/页面所在的文件名(不加.ets后缀)'
          router.pushUrl({ 
            url: '@bundle:com.example.gotohsppage/library/ets/pages/Index' 
          }).then(() => { 
            console.info("Go to hSP page success."); 
          }).catch((err: BusinessError) => { 
            console.error(`Go to hSP page failed, code is ${err.code}, message is ${err.message}.`); 
          }) 
        }) 
        .width(200) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

(5)总结

综上所述,HAR 是静态共享包,HSP 是动态共享包,它们和 HAP(应用的基本功能模块)一起被打包成 App Pack(应用发布形态)用于应用的发布与分发。

二、鸿蒙中App、HAP、HAR、HSP的关系

在这里插入图片描述

三、如何创建App、HAP、HAR、HSP

App
Build - Build Hap/APP - Build APP
在这里插入图片描述

HAP:
1、在工程目录上单击右键,选择New > Module。
在这里插入图片描述
2、在弹出的对话框中选择Empty Ability模板,点击Next
3、在New Project Module对话框中,进行feature模块类型的选择,配置name,type即可
在这里插入图片描述

HAR和HSP:

1、鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。
在这里插入图片描述

2、在Choose Your Ability Template界面中,选择Static Library即为HAR,选择Shared Library即为HSP。
在这里插入图片描述

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

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

相关文章

计算机二级MS之Excel

声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点&#x…

Unity导出WebGL,无法加载,data文件无法找到 404(NotFound)

问题:data文件无法找到404Not found 示例是使用IIS托管启动 F12可以看到not found 的报错 解决办法: iis无法识别data文件,在MIME类型中增加data 类型:application/octet-stream 添加之后,会在根目录下生产一个…

洛谷题目: P1225 黑白棋游戏 题解 (本题难)

题目传送门: P1225 黑白棋游戏 - 洛谷 (luogu.com.cn) 前言: 这道题要求我们找出从黑白棋游戏的初始棋盘状态变化到目标棋盘状态的最短着棋序列,也就是要找到最少的交换相邻方格棋子的步数以及每一步具体的交换位置。我们可以使用广度优先…

SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题

文章引用:https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值,访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…

通过Typora + PicGo + 阿里云对象存储(OSS)实现图床

文章目录 通过Typora PicGo 阿里云对象存储(OSS)实现图床1 准备工作1.1 阿里云对象存储 OSS配置创建oss存储空间bucket获取AccessKey 1.2 PicGo配置1.3 Typora配置 2 使用流程3 常见问题和解决3.1 创建asesskey3.2 You have no right to access this o…

爱普生FC-12M石英晶体谐振器精准时钟源解决方案

在当今数字化时代,电子设备无处不在,从我们日常使用的智能手机、平板电脑,到复杂的工业控制系统、通信基站,每一台设备的稳定运行都离不开精准的时钟信号。而在众多提供时钟信号的元件中,爱普生 FC-12M 石英晶体谐振器…

【css酷炫效果】纯CSS实现手风琴折叠效果

【css酷炫效果】纯CSS实现手风琴折叠效果 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492015 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&am…

AI辅助的逆向分析

AI大模型结合反编译工具与AI的辅助分析能力,已能实现部分代码逻辑的还原与重构。 1. 技术实现路径 (1)二进制文件预处理与反编译 反编译工具:需先使用IDA Pro、Ghidra等工具将二进制文件转换为低级中间表示(如汇编代…

物理标签与逻辑标签的区别

物理标签和逻辑标签都可以被机器&#xff08;如浏览器、爬虫、屏幕阅读器&#xff09;解析和识别&#xff0c;但它们的 语义信息 对机器的意义不同。以下是详细解释&#xff1a; 1. 物理标签的解析 可以识别&#xff1a;浏览器会正确解析物理标签&#xff08;如 <b>、<…

《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》

一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统&#xff0c;由一个服务器和多个客户端组成。客户端可以连接到服务器&#xff0c;向服务器发送消息&#xff0c;服务器接收到消息后将其转发给其他客户端&#xff0c;实现多人之间的实时聊天。系统使用 C 语言编写&#x…

鸿蒙NEXT项目实战-百得知识库04

代码仓地址&#xff0c;大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点&#xff1a; 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…

函数的介绍

1.函数的概念 在C语言中也有函数的概念&#xff0c;有些翻译为&#xff1a;子程序&#xff0c;这种翻译更为准确。C语言的函数就是一个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。 C语言的程序其实是有无数个小的函数组合而成的&#xff0c;也可以…

源自Deformable Convolutional Networks的一种可变形卷积实现解析

衍生记录&#xff1a;深度学习pytorch之简单方法自定义9类卷积即插即用 文章目录 概述1. 可变形卷积的背景2. DeformConv2D概述2.1 构造函数分析2.2 前向传播函数解析2.2.1 偏移量的计算与应用2.2.2 目标位置的计算2.2.3 四个角的插值2.2.4 双线性插值的权重2.2.5 特征图的采样…

【最后203篇系列】020 rocksdb agent

今天还是挺开心的一天&#xff0c;又在工具箱里加了一个工具。嗯&#xff0c;但是快下班的时候也碰到一些不太顺心的事&#xff0c;让我有点恼火。我还真没想到一个专职的前端&#xff0c;加测试&#xff0c;以及其他一堆人&#xff0c;竟然不知道后端返回的markdown,在前端渲染…

mysql-connector-python 报错(0xC0000005)

报错情况&#xff1a; 原因&#xff1a; mysql-connector-python版本不对&#xff0c;我们的mysql版本为sql8.0需要下载mysql-connector-python8.0....的库 方法&#xff1a; pip install mysql-connector-python8.1.0 即可

从零开始实现Stable Diffusion本地部署

1. 依赖安装 文件打包下载地址&#xff08;Stable Diffusion&#xff09; # git &#xff1a; 用于下载源码 https://git-scm.com/downloads/win # Python 作为基础编译环境 https://www.python.org/downloads/ # Nvidia 驱动&#xff0c;用于编译使用GPU显卡硬件 https://ww…

RAG各类方法python源码解读与实践:利用Jupyter对RAG技术综合评测【3万字长文】

检索增强生成&#xff08;RAG &#xff09;是一种结合信息检索与生成模型的混合方法。它通过引入外部知识来提升语言模型的性能&#xff0c;从而提高回答的准确性和事实正确性。为了简单易学&#xff0c;不使用LangChain框架或FAISS向量数据库&#xff0c;而是利用Jupyter Note…

RPA+AI 技术到底好在哪里?

在自动化领域&#xff0c;RPA与生成式AI都是强大的技术&#xff0c;都可以用来实现自动执行重复耗时的任务。 主要区别是&#xff1a;传统RPA擅长处理结构化与规则明确简单的流程&#xff0c;而在非结构化数据处理、动态上下文适应、智能决策等能力上有欠缺&#xff1b;而基于…

flowable适配达梦7 (2.1)

经过第一版的问题解决&#xff0c;后端项目可以启动&#xff0c;前端页面也集成进去。 前端在流程设计页面报错 之后发现主要是组件中modelerStore这个值没有 解决方法:在data增加对象 给component/process/designer.vue 中涉及到的每个子组件传入 :modelerStore“modeler…

基于java的ssm+JSP+MYSQL的母婴用品网站(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能模块&#xff1a; 主页 个人中心 用户管理 商品分类管理 商品信息管理 留言板管理 成长交流 系统管理 订单管理 留言管理 用户功能模块&#xff1a; 主页 个人中心 我的收藏管理 订单管理 前台首页功能模块&#xff1a; 首页 商品信息 论…