> 技术文档 > HarmonyOS第一课-应用程序框架基础_一个应用可以包含一个或多个hap包

HarmonyOS第一课-应用程序框架基础_一个应用可以包含一个或多个hap包


官方课程学习笔记

什么是HAP?

HAP(Harmony Ability Package)是由Ability类型的Module编译形成的.hap的文件,它实现了应用的功能特性,可以独立安装和运行,是应用安装的基本单位,一个应用可以包含多个HAP:

  • entry类型的Module:应用的主模块,包含应用的入口界面、图标和主功能特性,应用可以不包含或最多包含一个entry类型的HAP

  • feature类型的Module,应用的动态特性模块。

Module类型可通过如下配置查看、指定

HarmonyOS第一课-应用程序框架基础_一个应用可以包含一个或多个hap包

代码/资源共享

在ArkTS工程中,可以使用LIbrary类型的Module来实现代码、资源的共享,将该类型的Module编译后形成共享包(.har .hap的文件)

  • Static Library(.har)编译后为静态共享包(HAR)

  • Shared Library(.hsp)编译后为动态共享包(HSP)

共享包类型 编译和运行方式 发布和引用方式 HAR HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。注意:编译HAR时,建议开启混淆能力,保护代码资产。 HAR除了支持应用内引用,还可以独立打包发布,供其他应用引用。 HSP HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。 HSP一般随应用进行打包,当前支持应用内和集成态HSP。应用内HSP只支持应用内引用,集成态HSP支持发布到ohpm私仓和跨应用引用。
  • 补充说明:编译HSP时,也会同时生成.har的文件,里面包含了.hsp中导出的接口文件,引用方通过HAR来调用HSP的功能
Module类型 包类型 说明 Ability HAP 应用的功能模块,可以独立安装和运行,必须包含一个entry类型的HAP,可选包含一个或多个feature类型的HAP。 Static Library HAR 静态共享包,编译态复用。- 支持应用内共享,也可以发布后供其他应用使用。- 作为二方库,发布到OHPM私仓,供公司内部其他应用使用。- 作为三方库,发布到OHPM中心仓,供其他应用使用。- 多包(HAP/HSP)引用相同的HAR时,会造成多包间代码和资源的重复拷贝,从而导致应用包膨大。- 注意:编译HAR时,建议开启混淆能力,保护代码资产。 Shared Library HSP 动态共享包,运行时复用。- 当多包(HAP/HSP)同时引用同一个共享包时,采用HSP替代HAR,可以避免HAR造成的多包间代码和资源的重复拷贝,从而减小应用包大小。
编译态包结构

编译HAP和HSP时,会把他们所依赖的HAR直接编译到HAP和HSP中

HarmonyOS第一课-应用程序框架基础_一个应用可以包含一个或多个hap包

  • ets目录:ArkTS源码编译生成.abc文件。
  • resources目录:AppScope目录下的资源文件会合入到Module下面资源目录中,如果两个目录下存在重名文件,编译打包后只会保留AppScope目录下的资源文件。
  • module配置文件:AppScope目录下的app.json5文件字段会合入到Module下面的module.json5文件之中,编译后生成HAP或HSP最终的module.json文件。
发布态包结构

app.json5配置文件中,bundleName配置项指定了Bundle的唯一标识,Bundle包含工程编译出的所有.hap.hsp文件

应用发布时,将Bundle打包为.app(App Pack)文件,在pack.info文件中描述了App Pack中每个HAP和HSP属性

HarmonyOS第一课-应用程序框架基础_一个应用可以包含一个或多个hap包

  • App Pack是发布应用市场的基本单元,但不能直接安装

  • 在应用签名、云端分发、端侧安装时,都是以HAP/HSP为单位进行签名、分发和安装的。