OpenHarmony: 如何通过路由跳转到一个只有页面没有UIAbility的模块

2024-12-18 15:30:18
131次阅读
0个评论

鸿蒙开发中跳转到无 UIAbility 模块页面的实用指南

一、引言

在OpenHarmony应用开发过程中,我们常常会遇到模块架构多样化的情况,比如存在一些模块只有页面却没有 UIAbility 的情况。那如何在整个应用只想使用一个 UIAbility 的前提下,实现从有 UIAbility 的模块跳转到这类特殊模块的页面?

二、模块类型相关基础知识

(一)Module 的两种类型

首先,我们得了解一下 Module 在鸿蒙开发中的分类,它主要分为“Ability”和“Library”两种类型。“Ability”类型的 Module 经过编译后对应的就是我们熟悉的 HAP(HarmonyOS Ability Package)啦,这可是应用能够安装和运行的基本单元。而“Library”类型的 Module 则对应于 HAR(HarmonyOS Archive)或者 HSP(HarmonyOS Shared Package),它们在代码和资源共享方面发挥着重要作用。

(二)HAP 的不同类型及功能

进一步来说,HAP 又可以细分为 Entry 和 Feature 这两种类型。Entry 类型的 HAP 那可是应用的主模块,通常承担着实现应用的入口界面、设计引人注目的入口图标以及实现应用的主特性功能等重要任务。而 Feature 类型的 HAP 属于应用的动态特性模块,主要用于实现应用的一些特性功能,并且它还可以配置成按需下载安装,这样在优化应用资源利用和用户下载体验方面就很有优势啦。

(三)HAR 与 HSP 的特点

再看看 HAR 和 HSP 吧,它们都是为了实现代码和资源的共享而存在的。它们都能够包含代码、C++库、资源以及配置文件等内容。不过要注意,HAR 是静态共享包,它可不支持在配置文件中声明 pages 页面;而 HSP 作为动态共享包,是支持配置 pages 页面的,这一点在我们后续要讲的跳转操作中可是个关键知识点。

三、跳转无 UIAbility 但有页面模块的解决办法

对于那些没有 UIAbility 却依然提供了可跳转页面的模块,我们应当考虑使用 Library 类型的 HSP 来实现相应的功能。那具体怎么从有 UIAbility 的模块跳转到 HSP 中的页面?下面就来看一下示例代码和相关说明吧。

(一)示例代码解析

先来看下面这段代码示例:

import { router } from '@kit.ArkUI'; 
import { BusinessError } from '@kit.BasicServicesKit'; 

@Entry 
@Component 
struct Index { 
  @State message: string = '跳转到HSP页面'; 

  build() { 
    Row() { 
      Column() { 
        Button() { 
          Text(this.message) 
           .fontSize(24) 
        } 
       .onClick(() => { 
          router.pushUrl({ 
            url: '@bundle:com.example.gotohsppage/library/ets/pages/Index' 
          }).then(() => { 
            console.info("Go to hSP page success."); 
          }).catch((err: BusinessError) => { 
            console.error(`Go to hSP page failed, code is ${err.code}, message is ${err.message}.`); 
          }) 
        }) 
       .width(200) 
      } 
     .width('100%') 
    } 
   .height('100%') 
  } 
}

在这段代码里,重点在于 router.pushUrl 这个方法。当点击按钮时,就会触发这个方法来进行页面跳转操作。

(二)router.pushUrl 方法入参 url 格式说明

这里 router.pushUrl 方法的入参中 url 的内容可是有特定模板要求的,它的格式为:'@bundle:包名(bundleName)/模块名(moduleName)/路径/页面所在的文件名(不加.ets后缀)'。按照这个格式正确填写相应的信息,就能准确地告诉应用要跳转到哪个 HSP 模块里的具体页面啦。比如说在示例中的 '@bundle:com.example.gotohsppage/library/ets/pages/Index',就是指明了要跳转到名为 com.example.gotohsppage 的包下,library 这个模块里 ets/pages 路径下的 Index 页面。

收藏00

登录 后评论。没有帐号? 注册 一个。