写点什么

HarmonyOS 5.0 应用开发——应用打包 HAP、HAR、HSP

作者:高心星
  • 2024-10-31
    江苏
  • 本文字数:1574 字

    阅读完需:约 5 分钟

HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP

【高心星出品】


应用打包 HAP、HAR、HSP

一个应用通常会包含多种功能,将不同的功能特性按模块来划分和管理是一种良好的设计方式。在开发过程中,我们可以将每个功能模块作为一个独立的 Module 进行开发,Module 中可以包含源代码、资源文件、第三方库、配置文件等,每一个 Module 可以独立编译,实现特定的功能。这种模块化、松耦合的应用管理方式有助于应用的开发、维护与扩展。

Module 类型

Ability 类型的 Module: 用于实现应用的功能和特性。每一个 Ability 类型的 Module 编译后,会生成一个以.hap 为后缀的文件,我们称其为 HAP(Harmony Ability Package)包。HAP 包可以独立安装和运行,是应用安装的基本单位,一个应用中可以包含一个或多个 HAP 包,具体包含如下两种类型。


  • entry 类型的 Module:应用的主模块,包含应用的入口界面、入口图标和主功能特性,编译后生成 entry 类型的 HAP。每一个应用分发到同一类型的设备上的应用程序包,只能包含唯一一个 entry 类型的 HAP。

  • feature 类型的 Module:应用的动态特性模块,编译后生成 feature 类型的 HAP。一个应用中可以包含一个或多个 feature 类型的 HAP,也可以不包含。


Library 类型的 Module: 用于实现代码和资源的共享。同一个 Library 类型的 Module 可以被其他的 Module 多次引用,合理地使用该类型的 Module,能够降低开发和维护成本。Library 类型的 Module 分为 Static 和 Shared 两种类型,编译后会生成共享包。


  • Static Library:静态共享库。编译后会生成一个以.har 为后缀的文件,即静态共享包 HAR(Harmony Archive)。

  • Shared Library:动态共享库。编译后会生成一个以.hsp 为后缀的文件,即动态共享包 HSP(Harmony Shared Package)。

HAP

HAP(Harmony Ability Package)是应用安装和运行的基本单元。HAP 包是由代码、资源、第三方库、配置文件等打包生成的模块包,其主要分为两种类型:entry 和 feature。


entry:应用的主模块,作为应用的入口,提供了应用的基础功能。feature:应用的动态特性模块,作为应用能力的扩展,可以根据用户的需求和设备类型进行选择性安装。应用程序包可以只包含一个基础的 entry 包,也可以包含一个基础的 entry 包和多个功能性的 feature 包。


创建的基础项目就是包含一个 entry HAP 的项目,也可以通过如下方法创建 feature 的 HAP。



feature HAP 的模块是紧跟 entry HAP 的模块,如果 entry HAP 的模块运行设备类型是手机,那么 feature HAP 模块的运行类型只能选择手机,feature HAP 就相当于 entry HAP 的特性模块,给主模块提供特性功能的入口,主模块只能路由到特性模块,无法实现资源依赖和模块依赖,也就是编译期 feature 会打包成单独的 HAP 包,可以独立运行。


在运行多 HAP 的应用的时候需要配置运行模式:


HAR

HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。三方库的 library 基本都是 HAR。

创建 HAR
建立依赖


在 entry 的 oh-package.json5 中添加对于 HAR 的 library 的依赖,后面就可以使用对应的资源、类、方法和组件。

HAR 共享内容

在 HAR 的 index.ets 中标记要对外共享的内容。



剩下的就可以直接在引用的模块中直接使用。


对于资源的引用:由于 HAR 在编译期就会跟引用的模块放在一起,所以资源引用可以当作同一个模块中的引用。

HSP

HSP(Harmony Shared Package)是动态共享包,可以包含代码、C++库、资源和配置文件,通过 HSP 可以实现代码和资源的共享。HSP 不支持独立发布,而是跟随其宿主应用的 APP 包一起发布,与宿主应用同进程,具有相同的包名和生命周期。

创建 HSP
建立依赖同上
HSP 共享内容同上

但是,对于资源的引用有所不同,在编译期 HSP 会独立编译成 HSP 包,所以引用资源的时候,需要加入 HSP 包名称。


//这里的[library1]就是HSP模块名称Image($r('[library1].media.zgl')).width(80).height(80)
复制代码

HAR VS HSP



编译后的包:从图里面可以看到 HAR 编译期已经编译到所依赖的模块里面去了。



用户头像

高心星

关注

天将降大任于斯人也,必先苦其心志。 2024-10-17 加入

华为开发者专家(HDE)。 10年教学经验,兼任多家科技公司技术顾问。先后从事JavaEE项目开发、Python爬虫、HarmonyOS移动应用开发等课程的教学工作。参与开发《鸿蒙应用开发基础》和《鸿蒙项目实战》等课程。

评论

发布
暂无评论
HarmonyOS 5.0应用开发——应用打包HAP、HAR、HSP_鸿蒙_高心星_InfoQ写作社区