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

【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配置中,ype有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.mzph.cn/news/898407.shtml

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

相关文章

配置阿里云yum源

配置阿里云yum源 修改默认的yum仓库,把原有的移动到创建的目录里(踢出国外的yum源) # 切换到/ect/yum.repos.d/目录下 cd /etc/yum.repos.d/ # 新建repo目录 mkdir repo # 把原有的移动到创建的目录里 mv ./*.repo ./repo/配置yum源 # 找到…

在C#的MVC框架framework项目的使用ajax,及源码下载

在C# MVC框架中使用AJAX实现异步请求,有助于提高应用程序的性能和用户体验。 在MVC框架framework项目中,ajax使用方法如下 1.在Controller类中,创建一个新的方法(例如:GetRes),该方法处理AJAX请求并返回J…

Linux部署DHCP服务脚本

#!/bin/bash #部署DHCP服务 #userli 20250319#检查是否为root用户 if[ "$USER" ! "root" ] thenecho "错误:非root用户,权限不足!"exit 0 fi#配置网络环境 read -ep "请给本机配置一个IP地址(不…

vulhub Matrix-Breakout

1.下载靶机,打开靶机和kali虚拟机 2.查询kali和靶机ip 3.浏览器访问 访问81端口有登陆界面 4.扫描敏感目录 kali dirb 扫描 一一访问 robot.txt提示我们继续找找,可能是因为我们的字典太小了,我们换个扫描器换个字典试下,利用kali自带的最大…

科普类——双目立体视觉与 RGBD 相机的简单对比

双目立体视觉与 RGBD 相机生成的深度图在原理、性能和应用场景上有显著差异。以下是两者的详细对比和分析: 1. 原理差异 (1) 双目立体视觉 (Stereo Vision) 原理: 通过两个摄像头模拟人眼视差,计算匹配像素点的水平位移(视差&…

深度学习项目--基于DenseNet网络的“乳腺癌图像识别”,准确率90%+,pytorch复现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 如果说最经典的神经网络,ResNet肯定是一个,从ResNet发布后,很多人做了修改,denseNet网络无疑是最成功的…

面试八股 —— Redis篇

重点:缓存 和 分布式锁 缓存(穿透,击穿,雪崩) 降级可作为系统的保底策略,适用于穿透,击穿,雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 缓存——双写一致性 1.强一致性业务&#xff08…

mapbox-gl源码中解析style加载地图过程详解

我将结合 Mapbox GL JS 的源码示例,一步一步讲解 style 的解析和地图加载过程,帮助大家深入理解其内部机制。 Mapbox GL JS 是一个强大的 Web 地图库,利用 WebGL 技术渲染交互式地图。其核心功能之一是通过样式(style&#xff09…

瑞萨RA系列使用JLink RTT Viewer输出调试信息

引言 还在用UART调试程序么?试试JLINK的RTT Viewer吧!不需占用UART端口、低资源暂用、实时性高延时微秒级,这么好的工具还有什么理由不用了! 目录 一、JLink RTT Viewer 简介 二、软件安装 三、工程应用 3.1 SEGGER_RTT驱动包 3.2 手搓宏定义APP_PRINT 3.3 使用APP_…

MySQL 入门大全:查询语言分类

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

1.Windows+vscode+cline+MCP配置

文章目录 1.简介与资源2.在windows中安装vscode及Cline插件1. 安装vscode2. 安装Cline插件3. 配置大语言模型3. 配置MCP步骤(windows) 1.简介与资源 MCP官方开源仓库 MCP合集网站 参考视频 2.在windows中安装vscode及Cline插件 1. 安装vscode 2. 安装Cline插件 Cline插件…

性能测试过程实时监控分析

性能监控 前言一、查看性能测试结果的3大方式1、GUI界面报告插件2、命令行运行 html报告3、后端监听器接入仪表盘 二、influxDB grafana jmeter测试监控大屏1、原理:2、linux环境中influxDB 安装和配置3、jmerer后端监听器连接influxDB4、linux环境总grafana环境搭…

【Linux我做主】浅谈Shell及其原理

浅谈Linux中的Shell及其原理 Linux中Shell的运行原理github地址前言一、Linux内核与Shell的关系1.1 操作系统核心1.2 用户与内核的隔离 二、Shell的演进与核心机制2.1 发展历程2.2 核心功能解析2.3 shell的工作流程1. 用户输入命令2. 解析器拆分指令3. 扩展器处理动态内容变量替…

可视化图解算法:链表中倒数(最后)k个结点

1. 题目 描述 输入一个长度为 n 的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤105,0 ≤ai≤109,0 ≤k≤109 要求&am…

在线教育网站项目第四步:deepseek骗我, WSL2不能创建两个独立的Ubuntu,但我们能实现实例互访及外部访问

一、说明 上一章折腾了半天,搞出不少问题,今天我们在deepseek的帮助下,完成多个独立ubuntu24.04实例的安装,并完成固定ip,实践证明,deepseek不靠谱,浪费我2个小时时间,我们将在下面实…

CMake 保姆级教程

CMake 是一个跨平台的构建工具,用于生成适合不同平台和编译器的构建系统文件(如 Makefile 或 Visual Studio 项目文件)。 在 Windows 下使用 CMake 构建项目时,CMake 会根据 CMakeLists.txt 文件生成适合 Windows 的构建系统文件&…

zabbix数据库溯源

0x00 背景 zabbix数据库如果密码泄露被登录并新增管理员如何快速发现?并进行溯源? 本文介绍数据库本身未开启access log的情况。 0x01 实践 Mysql 数据库查insert SELECT * FROM sys.host_summary_by_statement_type where statement like %insert% 查…

Spring Boot集成PageHelper:轻松实现数据库分页功能

Spring Boot集成PageHelper:轻松实现数据库分页功能 1. 为什么需要分页? 分页是处理大数据量查询的核心技术,其重要性体现在: 性能优化:避免单次查询返回过多数据导致内存溢出或响应延迟。用户体验:前端展…

Spring Cloud之负载均衡之LoadBalance

目录 负载均衡 问题 步骤 现象 什么是负载均衡? 负载均衡的一些实现 服务端负载均衡 客户端负载均衡 使用Spring Cloud LoadBalance实现负载均衡 负载均衡策略 ​编辑 ​编辑LoadBalancer原理 服务部署 准备环境和数据 服务构建打包 启动服务 上传J…

数据无忧:自动备份策略全解析

引言 在信息化飞速发展的今天,数据已成为个人、企业乃至国家最为宝贵的资产之一。无论是日常办公文档、科研数据、客户资料,还是个人隐私信息,一旦丢失或损坏,都可能带来不可估量的损失。因此,备份文件作为数据安全的…