HarmonyOS鸿蒙Next中如何将多个uiability合并成一个hap包

HarmonyOS鸿蒙Next中如何将多个uiability合并成一个hap包 最好给个demo,谢谢各位大神

3 回复

开发者您好,一个HAP中可以包含一个或多个UIAbility组件,开发者可以创建多个UIAbility组件,打包的时候多个UIAbility就会达成一个HAP包,但是为了避免不必要的资源加载,一个HAP包推荐采用“一个UIAbility+多个页面”的方式:HAP包使用场景。开发者可以确认下是否可以解决您的问题,若未解决,请补充详细的问题描述和场景,以便我们提供针对性解决方案。

更多关于HarmonyOS鸿蒙Next中如何将多个uiability合并成一个hap包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,多个UIAbility可合并至一个HAP包。需在module.json5配置文件中,为每个UIAbility定义独立的abilities配置项,并确保它们位于同一模块内。构建时,DevEco Studio会将同一模块下的所有UIAbility打包至单个HAP。

在HarmonyOS Next中,多个UIAbility可以打包在同一个HAP(Harmony Ability Package)里。这是通过模块级module.json5配置文件来实现的。

核心步骤是在module.json5文件的abilities标签下,声明多个UIAbility。每个UIAbility都需要独立配置其namesrcEntrylaunchType等属性。

关键配置示例 (module.json5):

{
  "module": {
    "name": "entry",
    "type": "entry",
    "abilities": [
      {
        "name": "MainAbility",
        "srcEntry": "./ets/mainability/MainAbility.ets",
        "launchType": "standard",
        "description": "$string:MainAbility_desc",
        "icon": "$media:icon",
        "label": "$string:MainAbility_label",
        "startWindowIcon": "$media:startIcon",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ]
      },
      {
        "name": "SecondAbility",
        "srcEntry": "./ets/secondability/SecondAbility.ets",
        "launchType": "standard",
        "description": "$string:SecondAbility_desc",
        "icon": "$media:icon",
        "label": "$string:SecondAbility_label",
        "exported": true
      }
    ]
  }
}

项目结构示意:

项目根目录
├── entry
│   ├── src
│   │   ├── main
│   │   │   ├── ets
│   │   │   │   ├── mainability
│   │   │   │   │   ├── MainAbility.ets
│   │   │   │   │   └── pages
│   │   │   │   │       └── Index.ets
│   │   │   │   └── secondability
│   │   │   │       ├── SecondAbility.ets
│   │   │   │       └── pages
│   │   │   │           └── Index.ets
│   │   │   ├── resources
│   │   │   └── module.json5
│   │   └── ohosTest
│   └── build-profile.json5
└── oh_modules

代码调用示例: 在应用内启动另一个UIAbility(例如从MainAbility跳转到SecondAbility):

import { AbilityConstant, UIAbilityContext, wantCreator } from '@kit.AbilityKit';

let context: UIAbilityContext = this.context;
let want = wantCreator.createWant({
  bundleName: context.abilityInfo.bundleName,
  abilityName: 'SecondAbility',
  moduleName: 'entry'
});
context.startAbility(want).then(() => {
  console.info('Start ability successfully.');
}).catch((err) => {
  console.error(`Failed to start ability. Code is ${err.code}, message is ${err.message}`);
});

构建与打包: 完成配置和开发后,使用Hvigor或DevEco Studio的标准构建命令(如Build > Build HAP(s))即可。构建工具会根据module.json5的配置,将本模块(如entry)下的所有UIAbility及相关资源打包生成一个HAP文件。

要点总结:

  1. 配置是核心:所有UIAbility必须在同一个module.json5文件的abilities数组下声明。
  2. 独立入口:每个UIAbility有独立的源码目录(srcEntry)和逻辑。
  3. 同包调用:同HAP内的UIAbility间跳转,bundleName可设为当前上下文(context.abilityInfo.bundleName)的包名,moduleName为当前模块名(如'entry'),并指定目标abilityName即可。
  4. 安装单元:最终安装和分发的基本单位是HAP。这个HAP内包含了所有已配置的UIAbility。

按照上述方式配置,编译后得到的单个HAP安装到设备上,在桌面会看到每个配置了action.system.home技能的UIAbility对应的应用图标,点击不同图标即可进入不同的UIAbility。

回到顶部