1.3 HarmonyOS应用程序知识
1.3.1 App与HAP
HarmonyOS应用程序是指运行在HarmonyOS上的应用,包括系统应用和第三方应用。一个完整的应用程序包含程序代码、应用内的图片资源、视频资源、组件的样式资源等。这些资源按照一定的文件格式存储,最终被打包成一个压缩包来发布。HarmonyOS应用程序包以App Pack(Application Package)的形式发布,其中包含若干 HAP(HarmonyOS Ability Package)和描述 HAP属性的pack.info,它们之间的结构如图1-40所示。
图1-40 HarmonyOS应用程序包结构
在图1-40中,App Pack中包含了若干HAP格式的程序包,这些程序包可以分为Entry包和Feature包两类。
(1)Entry:应用的主模块。在一个 App 中,对于同一设备类型必须有且只有一个Entry类型的HAP,可独立安装运行。
(2)Feature:应用的动态特性模块。一个App可以包含一个或多个Feature类型的HAP,也可以不包含。只有包含Ability的HAP才能够独立运行。
这种模块化的应用程序的组织形式比较常见,不把所有程序都装载到一个程序内,而是按模块划分来开发,不仅有利于应用程序的组织开发,还可以将公用模块进行抽离,以便复用或单独部署,是一种高内聚、低耦合的开发思想。同时,HarmonyOS 的 Feature 模块还被设计成可以单独部署,只要 Feature 中包含Ability。
在HAP内部可能包含Ability(图1-40中的abilities)、库文件(libs)、资源文件(resources)、配置文件(config.json),其含义如下。
(1)Ability:Ability是应用所具备的能力的抽象,一个应用可以包含一个或多个 Ability。Ability 分为两种类型:FA(Feature Ability)和 PA(Particle Ability)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。FA有UI页面,而PA无UI页面。
(2)库文件:库文件是应用依赖的第三方代码,包含so、jar、bin、har等二进制文件,存储在libs目录下。
(3)资源文件:存储于resources目录下的应用的资源文件,包含字符串、图片、音频等。
(4)配置文件:配置文件config.json用于模块的相关配置,可以用于配置应用的权限、Ability的声明等。
在图1-40中,Entry和FeatureA都包含了Ability,说明它们是可以对用户提供服务的模块。FeatureB 不包含 Ability,只包含库文件和配置文件,说明FeatureB是对外提供函数服务的模块,包含若干特定功能的函数库,不可以被单独部署。FeatureC 只包含资源文件和配置文件,表示它是对外提供资源服务的模块,不可以被单独部署。
与HAP处于同级的还有pack.info文件,它是用来描述HAP信息的描述文件,由DevEco Studio编译生成,应用市场根据该文件进行拆包和HAP的分类存储。pack.info文件中描述HAP的属性包括以下几个。
(1)name:HAP文件名。
(2)moduleType:表示当前HAP的类型,包括entry和feature两种类型。
(3)deviceType:表示当前 HAP 支持运行的设备类型,包括 phone、wearable、tablet等。
(4)delivery-with-install:表示该HAP是否支持随应用安装。“true”表示支持随应用安装,“false”表示不支持随应用安装。