HarmonyOS 鸿蒙Next HAR和HSP模块内跳转和跨模块跳转以及跨应用跳转

HarmonyOS 鸿蒙Next Beta应用框架基础探索:HAR和HSP模块内跳转和跨模块跳转以及跨应用跳转

1. 模块内跳转

2. 跨模块跳转

3. 跨应用跳转

一个应用包含一个或者多个Module,可以在DevEcoStudio工程中创建一个或者多个Module,Module又分为 “Ability” 和 “Library”两种类型,“Ability”类型的Module对应于编译后的HAP(Harmony Ability Package);“Library” 类型的Module对应于HAR (Harmony Archive),或者HSP (Harmony Shared Package)。

App Pack

应用上架格式,发布到应用市场的基本单元可以包含多设备的编译产物(HAP、HSP)

HAP (Harmony Ability Package ) 应用安装和运行的基本单元

主要使用场景

  • -Entry:应用的主模块,用于实现应用的入口界面、入口图标、主特性功能等
  • -Feature:应用的特性模块,用于实现应用的特性

HSP (Harmony Shared Package) 动态共享包,运行时复用

主要使用场景 一多模块(HAP或者HSP)共用的代码、资源可以使用HSP,提高代码的 可重用性和可维护性

  • 元服务分包预加载
  • 按需加载,HSP包在运行时再按需加载

HAR (Harmony Archive)静态共享包,编译态复用

主要使用场景

  • 作为二方库,发布到OHPM私仓,供公司内部其他应用依赖使用
  • 作为三方库,发布到OHPM鸿蒙中心仓,供其他应用依赖使用

启动其他应用的UIAbility

启动其他应用的UIAbility,通常用户只需要完成一个通用的操作(例如需要选择一个文档应用来查看某个文档的内容信息,推荐使用隐式Want启动。系统会根据调用方的want参数来识别和启动匹配到的应用UIAbility。

启动UIAbility有显式Want启动和隐式Want启动两种方式。

  • 显式Want启动:启动一个确定应用的UIAbility,在want参数中需要设置该应用bundleName和abilityName,当需要拉起某个明确的UIAbility时,通常使用显式Want启动方式
  • 隐式Want启动:根据匹配条件由用户选择启动哪一个UIAbility,即不明确指出要启动哪一个UIAbility(abilityName參数未设置),在调用startAbilty()方法时,其入参want中指定了一系列的entities字段(表示目标UIAbility额外的类别信息,如浏览器、视频播放器)和actions字段(表示要执行的通用操作,如查看、分享、应用详情等)等参数信息,然后由系统去分析want,并帮助找到合适的UIAbility来启动。当需要拉起其他应用的UIAbility时,开发者通常不知道用户设备中应用的安装情况,也无法确定目标应用的bundleName和abilityName,通常使用隐式Want启动方式

主要代码:

import { common, Want } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  @State message: string = '列表界面';
  private context = getContext() as common.UIAbilityContext

  build() {
    Row() {
      Column({ space: 10 }) {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)

        Text('同模块下(entry)Ability跳转')
          .fontSize(20)
          .fontWeight(FontWeight.Bold)

        Button('聊天')
          .onClick(() => {
            let want: Want = {
              deviceId: '', //传空表示本设备
              bundleName: 'com.example.study', //应用唯一标识
              moduleName: 'entry', //模块名称
              abilityName: 'ChatAbility', //Ability名称

            }
            this.context.startAbility(want)
          })
        Button('我的')
          .onClick(() => {
            let want: Want = {
              deviceId: '', //传空表示本设备
              bundleName: 'com.example.study', //应用唯一标识
              moduleName: 'entry', //模块名称
              abilityName: 'MineAbility', //Ability名称
            }
            this.context.startAbility(want)
          })

        Text('不同模块下(feature)Ability跳转')
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .margin({ top: 20 })
        Text('(需要在编译配置里面将feature模块绑定编译:编译编辑配置->Deploy Multi Hap ->勾选Deploy->然后下拉框选择要绑定编译的模块)')
          .fontSize(12)
          .fontColor(Color.Red)
          .fontWeight(FontWeight.Normal)

        Button('feature模块')
          .onClick(() => {
            let want: Want = {
              deviceId: '', //传空表示本设备
              bundleName: 'com.example.study', //应用唯一标识
              moduleName: 'feature_', //模块名称
              abilityName: 'Feature_Ability', //Ability名称
            }
            this.context.startAbility(want)
          })


        Text('(隐式want)不同应用下(study2)Ability跳转')
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .margin({ top: 20 })
        Text('(需要在study2中的Ability下的module.json5中配置适配的skills详见Note笔记)')
          .fontSize(12)
          .fontColor(Color.Red)
          .fontWeight(FontWeight.Normal)
        Text('(隐式want不需要指定bundleName,因为不确定设备中是否已经安装了此应用,所以通常使用隐式Want)')
          .fontSize(12)
          .fontColor(Color.Red)
          .fontWeight(FontWeight.Normal)

        Button('study2应用')
          .onClick(() => {
            let want: Want = {
              deviceId: '', //传空表示本设备
              // bundleName: 'com.example.study2', //应用唯一标识 ,隐式want不需要指定bundleName,因为不确定设备中是否已经安装了此应用,所以通常使用隐式Want
              action: 'ohos.want.action.viewData', //对需求中某一行为的描述。
              entities: ['entity.system.default']  //需求中实体的描述。
            }
            this.context.startAbility(want)
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}


更多关于HarmonyOS 鸿蒙Next HAR和HSP模块内跳转和跨模块跳转以及跨应用跳转的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next HAR和HSP模块内跳转和跨模块跳转以及跨应用跳转的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS鸿蒙Next Beta应用框架基础探索中的HAR和HSP模块内跳转、跨模块跳转以及跨应用跳转问题,以下是一些专业解答:

HAR(Harmony Archive)为静态共享包,主要作为二方库或三方库使用,支持编译态复用。在HAR模块内跳转,可通过显式或隐式Want启动目标Ability。

HSP(Harmony Shared Package)为动态共享包,支持运行时复用,适用于多模块共用的代码和资源。HSP模块内跳转同样依赖于显式或隐式Want。

跨模块跳转时,需确保目标模块已正确绑定编译,并配置相应的路由信息。跨应用跳转则涉及不同应用间的交互,需使用隐式Want,并配置相应的skills和uris,以便系统能够识别并启动目标应用。

请注意,以上信息基于HarmonyOS鸿蒙Next Beta的当前版本,后续版本可能有所更新。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部