用户应用程序

鸿蒙应用程序有两种形态

  • 传统方式的需要安装的应用
  • 提供特定功能,免安装的应用(原子化服务)

用户应用程序包结构

HarmonyOS的用户应用程序包以APP Pack(Application Package)形式发布,它是由一个或多个HAP(HarmonyOS Ability Package)以及描述每个HAP属性的pack.info组成。HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开。

一个HAP是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型。

entry:应用的主模块。一个APP中,对于同一设备类型,可以有一个或多个entry类型的HAP,来支持该设备类型中不同规格(如API版本、屏幕规格等)的具体设备。如果同一设备类型存在多个entry模块,则必须配置distroFilter分发规则,使得应用市场在做应用的云端分发时,对该设备类型下不同规格的设备进行精确分发。

feature:应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。

鸿蒙hap 怎么生成私钥和签名 鸿蒙hap包_jar


声明:该图来自鸿蒙官网HAP是基础的部署包,一个APP中可以包含多个HAP。同一类型的设备,可配置多个entry以适应不同的规格。同一规格的设备,如果存在多个entry需要写分发策略,意思就是说需要保证分配到具体设备中的app包中只能包含一个entry,可包含零个或多个feature,如上图中的包结构。

HAP包含ability可独立运行。

鸿蒙hap 怎么生成私钥和签名 鸿蒙hap包_配置文件_02


创建鸿蒙应用后,会自动添加一个entry,可在其中实现逻辑,libs路径保存库文件(so,jar,bin,har等二进制文件)resources路径保存资源文件。

鸿蒙hap 怎么生成私钥和签名 鸿蒙hap包_配置文件_03


真机调试时,推入的是签名后的HAP包。

{
    "summary": {
        "app": {
            "bundleName": "com.tdtech.calculatortest",
            "version": {
                "code": 1000000,
                "name": "1.0.0"
            }
        },
        "modules": [
            {
                "mainAbility": "com.tdtech.calculatortest.MainAbility",
                "deviceType": [
                    "phone"
                ],
                "abilities": [
                    {
                        "name": "com.huawei.agconnect.core.ServiceDiscovery"
                    },
                    {
                        "name": "com.tdtech.calculatortest.MainAbility",
                        "label": "$string:entry_MainAbility"
                    }
                ],
                "distro": {
                    "moduleType": "entry",
                    "installationFree": false,
                    "deliveryWithInstall": true,
                    "moduleName": "entry"
                },
                "apiVersion": {
                    "compatible": 4,
                    "releaseType": "Release",
                    "target": 5
                }
            }
        ]
    },
    "packages": [
        {
            "deviceType": [
                "phone"
            ],
            "moduleType": "entry",
            "deliveryWithInstall": true,
            "name": "entry-debug-rich-unsigned"
        }
    ]
}

pack.info中存储了包结构中的app信息,模块信息,分发策略,设备类型等信息。简单应用调试时,并未打成app包进行调试,而是直接打成HAP包进行调试的。