HarmonyOS鸿蒙Next中关于NavPathStack跳转不成功
HarmonyOS鸿蒙Next中关于NavPathStack跳转不成功 在项目中复制了其他项目的page之后并在项目中的main_page等中配置了 跳转出现error code = 100005这个
【背景知识】
- 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"



这些有需要优化的吗?
错误信息 Builder function not registered.
错误描述 Navigation跳转时,未在目标页面注册创建NavDestination组件的builder函数,系统会抛出此错误。
可能原因
- 未声明路由入口函数:
目标页面缺少@Builder装饰的路由入口函数。 - 未使用NavDestination组件:
在路由入口函数中未使用NavDestination作为根组件。 - 路由表配置错误:
模块的module.json5中未正确配置"abilities"的路由表。
在HarmonyOS Next中,NavPathStack跳转失败可能涉及路径栈配置或导航目标未正确定义。需检查NavPathStack的路径参数是否与目标页面匹配,确保导航目标在路由表中已注册。同时,验证页面跳转逻辑中是否使用了正确的路径名,避免路径冲突或未定义的导航目标。
错误代码100005通常表示路由目标页面未在配置中正确注册。请检查以下步骤:
- 确认复制的页面已在module.json5中正确声明路由路径
- 检查目标页面的路径名称是否与跳转代码中使用的路径完全匹配
- 确保所有页面路径在配置中保持唯一性
- 验证NavPathStack.pushUrl()方法中传入的路径参数格式正确
建议重新核对页面配置文件与跳转代码中的路径定义,确保完全一致。

