HarmonyOS鸿蒙Next中发布邀请测试后,动态加载的hsp包内页面跳转失败

HarmonyOS鸿蒙Next中发布邀请测试后,动态加载的hsp包内页面跳转失败

环境:

设备 Pura 70
软件版本 5.0.0.123
场景 邀请测试
app类型 元服务

问题

模拟器及真机运行元服务,可以正常跳转,但是在发布邀请测试后,元服务首包hap跳转到其动态依赖的hsp包中的页面后,再点击该页面中的链接,无法跳转到当前hsp包内的其他页面。

路由跳转的模式

从首包hap跳转到动态依赖包hsp,采用navigation跳转; hsp内部采用router.pushUrl跳转,其中url为 @bundle:com.atomicservice.6917560283xxxxxxxxx/youyibao/ets/pages/agreement/ClauseAndNotice 已确认,BundleName与app.json中是一致的。(6917560283xxxxxxxxx是打码)

利用hdc连接设备查看日志

运行命令:hdc hilog | grep 元服务BundleName

得到以下报错:

04-24 12:27:39.475 10852 10852 I C03900/micservice.6917560283xxxxxxxxx/Ace: [(100000:100000:scope)] Page router manager is loading page[202]: @bundle:com.atomicservice.6917560283xxxxxxxxx/youyibao/ets/pages/agreement/Plan.
04-24 12:27:39.476 10852 10852 E C03F00/micservice.6917560283xxxxxxxxx/ArkCompiler: [ecmascript] Cannot execute ark file '@bundle:com.atomicservice.6917560283xxxxxxxxx/youyibao/ets/pages/agreement/Plan.abc' with entry '_GLOBAL::func_main_0'
04-24 12:27:39.476 10852 10852 W C03900/micservice.6917560283xxxxxxxxx/Ace: [(100000:100000:scope)] page not found! bundleName: com.atomicservice.6917560283xxxxxxxxx, moduleName: youyibao, url: pages/agreement/Plan

更多关于HarmonyOS鸿蒙Next中发布邀请测试后,动态加载的hsp包内页面跳转失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

结论:hap跳转到动态加载的hsp后,hsp内的跳转必须采用Navigation,而不能采用router.pushUrl({url: @bundle:moduleName/pagePath})的路由写法。

解决办法:改写全部代码的hsp跳转。

吐槽: Navigation的写法需要写五步,十分不优雅,1、route_map;2、增加NavDestination组件;3、增加builder方法;4、引入变量helper;5、修改路由跳转方法。

更多关于HarmonyOS鸿蒙Next中发布邀请测试后,动态加载的hsp包内页面跳转失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


补充代码,如图:

cke_15226.png

解释:

在动态加载的hsp中,利用@bundle方法进行跳转,其中值得注意的是,跳转不是写在页面中的,而是写在数据模型的方法中的,其中数据模型中定义了方法的接口,在Binder中将各个产品的具体方法和数据模型进行绑定,实现了模型和方法的解耦。若改为Navigation路由跳转,改动较大。

另外,在本地启动模拟器或真机时,采用deploy multi haps,可以正常跳转,不勾选则无法跳转。

cke_15930.png

您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

补全复现代码,让参与用户更快速复现您的问题;

更多提问技巧,请参考:【Tips】如何提个好问题

补充三:hsp的module.json5中配置了【“pages”: “$profile:main_pages”】,并在模块级的main_pages文件中配置了路由。

{
  "src": [
    "pages/Product",
    "pages/agreement/HealthNotice",
    "pages/agreement/Agreement",
    "pages/agreement/Clause",
    "pages/agreement/HealthBook",
    "pages/agreement/HospitalListPage",
    "pages/agreement/Notice",
    "pages/agreement/Plan",
    "pages/agreement/Rate",
    "pages/agreement/ClauseAndNotice",
    "pages/agreement/PDFPreviewerPage"
  ]
}

补充:其中第二行报错中有一个文件:

youyibao/ets/pages/agreement/Plan.abc

实际上打出的hsp包中没有该文件,只有modules.abc,这正常吗?

在HarmonyOS鸿蒙Next中,发布邀请测试后,动态加载的HSP包内页面跳转失败,可能由以下原因导致:

  1. 路径问题:确保跳转路径正确,HSP包内的页面路径需与调用路径一致。
  2. 权限配置:检查config.json中是否已正确配置HSP包的权限和页面路由。
  3. HSP包加载状态:确认HSP包已成功加载,可通过日志或调试工具验证。
  4. 页面声明:确保HSP包内的页面已在config.json中正确声明。
  5. 版本兼容性:检查HSP包与主应用的版本是否兼容。

建议通过日志排查具体错误,并参考官方文档进行调试。

回到顶部