一个完整的应用程序除了包含程序本身,还包括所依赖的类库、图片等各部分。鸿蒙将这些内容以压缩文件的形式组合在一起,形成一个鸿蒙应用程序包(Application Package,APP),并以.app为后缀名。应用程序包包含了一个或多个HAP(HarmonyOS Ability Package),即Ability的部署包。在APP中,通过pack.info配置文件管理所有HAP。在每个HAP内部,通过config.json配置文件对HAP的基本属性进行配置。
HAP分为主HAP(Entry HAP,以下简称Entry)和特征HAP(Feature HAP,以下简称Feature)两类:
(1)Entry:Entry相当于针对特定设备的应用程序入口,一个应用程序包中针对一个设备类型有且仅有一个Entry。并且,Entry中必须包含Ability。
(2)Feature:Feature是应用程序的动态特征模块,因此,一个应用程序包中可以没有Feature,也可以存在多个Feature。Feature不一定包含Ability,可以仅用于提供类库,也可以仅用于提供资源。
注意: 为了方便读者理解,Entry类似于Windows中的.exe文件,为应用程序的入口;Feature类似于Windows中的.dll文件,提供动态特征,并不是在每次使用该应用程序时都能被调用。
典型的应用程序包的内部结构如图2-2所示。
但是,对于初学者而言,DevEco Studio默认所创建的工程并不复杂,通常只有一个Entry类型的HAP,如图2-3所示。
图2-2 鸿蒙应用程序包的内部结构(多HAP)
图2-3 鸿蒙应用程序包的内部结构(单HAP)
HAP和APP是免安装的,在鸿蒙操作系统上可以直接运行,但是,只有被签名的APP和HAP才能被安装在真机上,具体的签名方法详见2.3节。
在应用程序分发时并不一定将APP中的所有的HAP下载到指定设备上。例如,针对类型A设备开发的Entry会下载到该类型的设备中,而不会被安装到类型B的设备中,类型B的设备会下载与其适配的Entry。