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
结论: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
补充代码,如图:
解释:
在动态加载的hsp中,利用@bundle方法进行跳转,其中值得注意的是,跳转不是写在页面中的,而是写在数据模型的方法中的,其中数据模型中定义了方法的接口,在Binder中将各个产品的具体方法和数据模型进行绑定,实现了模型和方法的解耦。若改为Navigation路由跳转,改动较大。
另外,在本地启动模拟器或真机时,采用deploy multi haps,可以正常跳转,不勾选则无法跳转。
补充三: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包内页面跳转失败,可能由以下原因导致:
- 路径问题:确保跳转路径正确,HSP包内的页面路径需与调用路径一致。
- 权限配置:检查
config.json
中是否已正确配置HSP包的权限和页面路由。 - HSP包加载状态:确认HSP包已成功加载,可通过日志或调试工具验证。
- 页面声明:确保HSP包内的页面已在
config.json
中正确声明。 - 版本兼容性:检查HSP包与主应用的版本是否兼容。
建议通过日志排查具体错误,并参考官方文档进行调试。