【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,为按需下载,用户需通过应用内引导或应用市场手动获取。

dart 复制代码
{
  "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模块中的页面需求实现如下:

dart 复制代码
import { router } from '@kit.ArkUI'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
 
@Entry 
@Component 
struct Index { 
  @State 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。

相关推荐
一只栖枝3 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
zhanshuo7 小时前
在鸿蒙里优雅地处理网络错误:从 Demo 到实战案例
harmonyos
zhanshuo7 小时前
在鸿蒙中实现深色/浅色模式切换:从原理到可运行 Demo
harmonyos
whysqwhw13 小时前
鸿蒙分布式投屏
harmonyos
whysqwhw14 小时前
鸿蒙AVSession Kit
harmonyos
whysqwhw16 小时前
鸿蒙各种生命周期
harmonyos
whysqwhw17 小时前
鸿蒙音频编码
harmonyos
whysqwhw17 小时前
鸿蒙音频解码
harmonyos
whysqwhw17 小时前
鸿蒙视频解码
harmonyos
whysqwhw17 小时前
鸿蒙视频编码
harmonyos