HarmonyOS 鸿蒙Next中Navigation路由如何实现插件插拔

HarmonyOS 鸿蒙Next中Navigation路由如何实现插件插拔 Router 是否会逐步废弃,废弃后,navigation 是否能动态加载 page,har 包以插件的方式插拔到主工程,主工程如何去加载/跳转到 har 包的 page

4 回复

router不废弃,只是不会演进了。 Page是和Router一起的概念,Page在Navigation上对应的是NavDestination,现在Navigation和NavDestination都是控件。Navigation上只能跳转到NavDestination,不能跳转Page。主工程跳转到har包里的页面,就跟引用一个自定义组件一样。har包以插件的形式插拔到主工程,这个不是Navigation相关的。

更多关于HarmonyOS 鸿蒙Next中Navigation路由如何实现插件插拔的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


如果想要实现router那样的全屏跳转,Navigation是否要在最底层的就要接管路由栈了,如果是一个很深嵌套的入口,点击跳转Navigation,跳转过去的页面怎么管理才能做全屏呢,

在HarmonyOS鸿蒙Next中,Navigation路由的插件插拔通过NavigationPlugin接口实现。开发者需实现该接口,并在onAttachonDetach方法中处理插件的加载和卸载。通过NavigationControlleraddPluginremovePlugin方法动态管理插件。

关于HarmonyOS Next中Navigation路由实现插件化加载的问题:

  1. Router与Navigation的关系: 目前Navigation是HarmonyOS推荐的路由方案,但Router短期内不会完全废弃,两者会并存一段时间。Navigation确实提供了更好的插件化支持。

  2. HAR包动态加载方案:

  • 通过动态导入(import())方式加载HAR模块
  • 使用Navigation的router.pushUrl()跳转时指定目标HAR的bundleName
  • 示例代码:
import { router } from '@kit.ArkUI';

// 跳转到HAR中的页面
router.pushUrl({
  url: 'pages/PluginPage',
  params: { bundleName: 'com.example.plugin' }
})
  1. 插件管理要点:
  • 主工程需提前安装HAR插件包
  • 插件HAR需要声明exported: true的ability
  • 通过ohpm包管理器实现插件的安装/卸载
  • 运行时检查插件可用性
  1. 注意事项:
  • 插件页面需符合Navigation规范
  • 插件与主工程共享同一ArkUI运行时
  • 版本兼容性需要特别处理

这种设计确实实现了业务模块的插件化热插拔,符合HarmonyOS的模块化架构理念。

回到顶部