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 包名称。
HAR VS HSP
编译后的包:从图里面可以看到 HAR 编译期已经编译到所依赖的模块里面去了。
评论