HarmonyOS鸿蒙Next中关于NavPathStack跳转不成功

HarmonyOS鸿蒙Next中关于NavPathStack跳转不成功 在项目中复制了其他项目的page之后并在项目中的main_page等中配置了 跳转出现error code = 100005这个

8 回复

【背景知识】

  • ArkGuard字节码混淆原理及功能:ArkGuard提供了基础字节码混淆能力,将代码中的函数名、类名、文件名等名字变成简短无意义的名字,提高通过阅读代码猜测其用途的难度。

DevEco Studio创建的工程中obfuscation-rules.txt默认会配置以下混淆项:

-enable-property-obfuscation
-enable-toplevel-obfuscation
-enable-filename-obfuscation
-enable-export-obfuscation

其中-enable-filename-obfuscation表示开启文件名混淆,开启后,会导致三方库生成的路由文件route_map.json中pageSourceFile字段指向的ets文件名被混淆,代码中根据名称路由时(ZRouter.getInstance().push("IndexBuilder");(或者是mainBuilder))找不到目标页面。

【分析结论】 应用开启文件名混淆后,三方库通过名称进行页面路由找不到目标页面。

【修改建议】 entry模块的obfuscation-rules.txt使用-keep-file-name指定要保留的文件/文件夹的名称(不需要写文件后缀),支持使用名称类通配符,被-keep-file-name指定的文件/文件夹名称不会被混淆。如下所示,-keep-file-name选项下面新增_generated、ZR*(通配符)【所使用的三方库关键字】,配置对应的文件夹/文件的名称不被混淆:

-enable-property-obfuscation
-enable-toplevel-obfuscation
-enable-filename-obfuscation
-enable-export-obfuscation
-keep-file-name
_generated
ZR*

【总结】 应用使用三方库或其它路由导航能力,若开启文件名混淆,则应按需配置保留的文件/文件夹名称,避免路由框架找不到目标页面。

更多关于HarmonyOS鸿蒙Next中关于NavPathStack跳转不成功的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


添加之后还有Push destination failed, error code = 100005, error.message = Builder function not registered

mainpage routepage配置好了 请问还有其他需要注意的吗 跳转的page为其他app复制的,

检查下编译后的route_map.json的内容是不是有丢失。如果有,建议新建一个json配置文件,并配置好路由,然后在module.json5中将routerMap指向新建的配置文件。清理项目缓存,重新编译运行。

module中加 "routerMap": "$profile:route_map"

cke_1628.png

cke_3606.png

cke_10161.png

这些有需要优化的吗?

错误信息 Builder function not registered.

错误描述 Navigation跳转时,未在目标页面注册创建NavDestination组件的builder函数,系统会抛出此错误。

可能原因

  1. 未声明路由入口函数
    目标页面缺少@Builder装饰的路由入口函数。
  2. 未使用NavDestination组件
    在路由入口函数中未使用NavDestination作为根组件。
  3. 路由表配置错误
    模块的module.json5中未正确配置"abilities"的路由表。

在HarmonyOS Next中,NavPathStack跳转失败可能涉及路径栈配置或导航目标未正确定义。需检查NavPathStack的路径参数是否与目标页面匹配,确保导航目标在路由表中已注册。同时,验证页面跳转逻辑中是否使用了正确的路径名,避免路径冲突或未定义的导航目标。

错误代码100005通常表示路由目标页面未在配置中正确注册。请检查以下步骤:

  1. 确认复制的页面已在module.json5中正确声明路由路径
  2. 检查目标页面的路径名称是否与跳转代码中使用的路径完全匹配
  3. 确保所有页面路径在配置中保持唯一性
  4. 验证NavPathStack.pushUrl()方法中传入的路径参数格式正确

建议重新核对页面配置文件与跳转代码中的路径定义,确保完全一致。

回到顶部