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

George_wu_
发布于 2025-3-21 21:35
浏览
1收藏

【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配置中,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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

如上图(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'; 
 
@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%') 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

(5)总结

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

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

【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解-鸿蒙开发者社区

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

App
Build - Build Hap/APP - Build APP
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解-鸿蒙开发者社区【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解-鸿蒙开发者社区

HAP:
1、在工程目录上单击右键,选择New > Module。
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解-鸿蒙开发者社区
2、在弹出的对话框中选择Empty Ability模板,点击Next
3、在New Project Module对话框中,进行feature模块类型的选择,配置name,type即可
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解-鸿蒙开发者社区

HAR和HSP:

1、鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解-鸿蒙开发者社区

2、在Choose Your Ability Template界面中,选择Static Library即为HAR,选择Shared Library即为HSP。
【HarmonyOS Next】鸿蒙中App、HAP、HAR、HSP概念详解-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
1
收藏 1
回复
举报
1
1
回复
    相关推荐