KMP与鸿蒙系统的跨端通信方法、装置、设备及介质与流程

摘要: 本发明涉及移动应用开发,具体涉及一种kmp与鸿蒙系统的跨端通信方法、装置、设备及介质。背景技术:1、随着移动应用开发对多平台适配需求的日益增长,开发者亟需一种高...
KMP与鸿蒙系统的跨端通信方法、装置、设备及介质与流程

本发明涉及移动应用开发,具体涉及一种kmp与鸿蒙系统的跨端通信方法、装置、设备及介质。

背景技术:

1、随着移动应用开发对多平台适配需求的日益增长,开发者亟需一种高效、统一的跨平台开发框架,以降低代码重复开发成本并提升维护效率。在当前技术生态中,kotlinmultiplatform(kmp)因其支持代码在android、ios、web等平台间共享的特性,成为主流选择。然而,鸿蒙(harmonyos)作为国产操作系统的重要分支,其用户基数和技术生态的快速扩展,使得移动应用必须新增对鸿蒙平台的支持。然而,kmp官方尚未提供对鸿蒙系统的直接支持,致使在复用kmp共享逻辑的同时,还需兼容鸿蒙特有的ets语言规范、arkui渲染框架及差异化原生能力调用机制,存在显著的跨端适配障碍。

2、现有技术中,通过kmp的kotlin/js编译器将共享代码编译为javascript,供鸿蒙ets工程调用,但是kmp的stateflow作为协程数据流,其状态变更无法直接映射到鸿蒙arkui的响应式更新机制,需额外适配才能驱动界面刷新,影响使用体验。

技术实现思路

1、本发明的目的之一在于提kmp与鸿蒙系统的跨端通信方法,以解决现有技术中的kmp的状态变更无法直接映射到鸿蒙arkui的响应式更新机制,需额外适配才能驱动界面刷新,影响使用体验的问题;目的之二在于提供一种kmp与鸿蒙系统的跨端通信装置;目的之三在于提供一种电子设备;其目的之四在于提供一种计算机可读存储介质。

2、为了实现上述目的,本发明采用的技术方案如下:

3、一种kmp与鸿蒙系统的跨端通信方法,应用于kmp,包括:将kmp共享的kotlin代码编译为js代码文件和.d.ts类型定义文件;在所述js代码文件中构建bridge工具模块,并基于所述.d.ts类型定义文件建立鸿蒙系统调用的类型契约,所述类型契约用于向所述鸿蒙系统暴露类型安全的调用接口;在所述js代码文件中构建跨端状态桥接器,通过所述跨端状态桥接器监测所述kmp的状态变化,并通过所述bridge工具模块基于所述类型契约将状态变更信息同步至所述鸿蒙系统。

4、根据上述技术手段,通过将kmp共享的kotlin代码编译为js代码文件和.d.ts类型定义文件,在js代码文件中构建bridge工具模块并基于.d.ts类型定义文件建立鸿蒙系统调用的类型契约以向鸿蒙系统暴露类型安全的调用接口,同时在js代码文件中构建跨端状态桥接器以监测kmp的状态变化并通过bridge工具模块基于类型契约将状态变更信息同步至鸿蒙系统,克服了js运行时与鸿蒙ets原生环境之间因语言隔离导致的接口调用断裂及响应式状态无法互通的技术障碍,达到了在保留kmp逻辑复用优势的同时,实现鸿蒙系统能力调用及ui界面实时精准刷新的效果。

5、进一步的,所述方法还包括:通过所述bridge工具模块,接收所述鸿蒙系统发送的调用请求;根据所述调用请求以及所述kotlin代码,生成对应的调用响应;基于所述类型契约,通过所述bridge工具模块,将所述调用响应返回至所述鸿蒙系统。

6、根据上述技术手段,通过bridge工具模块接收鸿蒙系统发送的调用请求,根据调用请求以及kotlin代码生成对应的调用响应,并基于类型契约通过bridge工具模块将调用响应返回至鸿蒙系统,克服了js运行时与鸿蒙ets原生环境之间因语言隔离导致的接口调用断裂及数据类型不匹配的技术障碍,达到了在保障跨语言调用类型安全的同时实现高效、稳定的双向数据交互与技术效果。

7、进一步的,在组件化情况下,构建umbrella入口,以使所述鸿蒙系统通过所述umbrella入口访问所述kotlin代码,所述umbrella入口被配置为收敛并封装所述kmp中各业务模块需向鸿蒙系统暴露的跨端共享接口集。

8、根据上述技术手段,通过构建umbrella入口以收敛并封装kmp中各业务模块需向鸿蒙系统暴露的跨端共享接口集,使鸿蒙系统能够通过该统一入口访问kotlin代码,克服了组件化架构下因接口分散导致的调用链路复杂、维护成本高及集成困难的技术障碍,达到了简化鸿蒙侧接入流程、实现跨端接口统一管理以及提升系统整体可维护性与扩展性的技术效果。

9、进一步的,所述方法还包括:基于所述类型契约,通过所述bridge工具模块向所述鸿蒙系统发送调用请求;通过所述bridge工具模块,接收所述鸿蒙系统的调用响应。

10、根据上述技术手段,通过基于类型契约利用bridge工具模块向鸿蒙系统发送调用请求并接收鸿蒙系统的调用响应,克服了js运行时与鸿蒙ets原生环境之间因通信协议缺失导致的异步交互阻塞及数据序列化不一致的技术障碍,达到了实现跨语言双向异步通信、保障调用链路完整性以及提升系统交互实时性与稳定性的技术效果。

11、进一步的,所述方法还包括:若所述调用请求为鸿蒙系统的原生能力调用请求或第三方库调用请求,则将所述鸿蒙系统或第三方库的.d.ts类型定义文件转换为kotlin外部接口;根据所述kotlin外部接口,解析所述原生能力调用请求或第三方库调用请求中的方法标识与参数;基于所述类型契约,通过所述bridge工具模块将所述方法标识与参数发送至所述鸿蒙系统,以触发与所述kotlin外部接口类型匹配的鸿蒙原生或第三库调用实现。

12、根据上述技术手段,通过将鸿蒙系统或第三方库的.d.ts类型定义文件转换为kotlin外部接口,并据此解析调用请求中的方法标识与参数,进而基于类型契约通过bridge工具模块将信息发送至鸿蒙系统以触发匹配的原生或第三方库调用实现,克服了kotlin/js环境因缺乏原生类型感知而导致的接口调用歧义、参数传递错误及运行时崩溃的技术障碍,达到了实现跨语言类型安全校验、确保原生能力精准映射以及提升第三方库集成稳定性与开发效率的技术效果。

13、进一步的,所述通过所述bridge工具模块将调用请求发送至鸿蒙系统,包括:根据待调用的目标方法标识及关联参数信息,构建调用请求,所述调用请求包括方法标识,参数对象以及回调标识;通过所述bridge工具模块将所述调用请求转发至所述鸿蒙系统,以使所述鸿蒙系统触发与所述方法标识对应的业务逻辑执行。

14、根据上述技术手段,通过将鸿蒙系统或第三方库的.d.ts类型定义文件转换为kotlin外部接口,并据此解析调用请求中的方法标识与参数,进而基于类型契约通过bridge工具模块将信息发送至鸿蒙系统以触发匹配的原生或第三方库调用实现,克服了kotlin/js环境因缺乏原生类型感知而导致的接口调用歧义、参数传递错误及运行时崩溃的技术障碍,达到了实现跨语言类型安全校验、确保原生能力精准映射以及提升第三方库集成稳定性与开发效率的技术效果。

15、进一步的,所述将kmp共享的kotlin代码编译为js代码文件和.d.ts类型定义文件,包括:在所述kmp共享的kotlin代码的跨端共享对象中添加跨端导出注解,得到js代码;根据所述跨端导出注解,生成.d.ts类型定义文件。

16、根据上述技术手段,通过在kmp共享的kotlin代码的跨端共享对象中添加跨端导出注解以得到js代码,并根据跨端导出注解生成.d.ts类型定义文件,克服了传统手动编写类型定义文件容易出错、维护成本高以及js与kotlin侧接口契约不一致导致的技术障碍,达到了实现跨端接口自动化类型映射、保障类型安全校验以及提升开发效率与代码可维护性的技术效果。

17、进一步的,所述方法还包括:对所述js代码文件和所述.d.ts类型定义文件的导出接口进行边界收敛,得到目标跨端访问接口;基于所述目标跨端访问接口向所述鸿蒙系统暴露标准化跨端交互协议。

18、根据上述技术手段,通过对js代码文件和.d.ts类型定义文件的导出接口进行边界收敛以得到目标跨端访问接口,并基于该目标跨端访问接口向鸿蒙系统暴露标准化跨端交互协议,克服了跨端接口分散冗余、交互规则不统一导致的调用链路混乱、适配成本高及安全管控缺失的技术障碍,达到了精简跨端交互链路、统一鸿蒙侧接入标准、降低多版本适配难度同时强化接口访问安全管控的技术效果。

19、进一步的,所述通过跨端状态桥接器检测所述kmp的状态变化,并通过所述bridge工具模块将状态变更值同步至所述鸿蒙系统,包括:在所述跨端状态桥接器接收到所述kmp的实时状态值时,将所述实时状态值与历史状态值进行比对;若所述实时状态值中与所述历史状态值不相同,则根据所述实时状态值生成状态变更信息;通过所述bridge工具模块将状态变更信息同步至所述鸿蒙系统,所述状态变更信息包括状态名称和实时状态值。

20、根据上述技术手段,通过在跨端状态桥接器接收到kmp的实时状态值时将其与历史状态值进行比对,仅在二者存在差异时生成包含状态名称和实时状态值的状态变更信息,并通过bridge工具模块将该状态变更信息同步至鸿蒙系统,克服了全量状态高频同步带来的跨运行时数据传输冗余、性能开销过高以及arkui无效重绘的技术障碍,达到了精准过滤无效状态同步请求、大幅降低跨端通信带宽占用、减少ui不必要刷新次数同时提升整体状态同步效率与应用流畅度的技术效果。

21、第二方面,本技术实施例提供一种kmp与鸿蒙系统的跨端通信方法,应用于鸿蒙系统,包括:获取kmp中的js代码文件和.d.ts类型定义文件;基于所述.d.ts类型定义文件建立的类型契约,在所述js代码文件中注册bridge事件处理器,所述类型契约用于指示所述kmp向所述鸿蒙系统暴露类型安全的调用接口;通过同步事件处理器,将通过所述bridge事件处理器接收到的状态变更值写入appstorage或arkui可观察状态容器,以驱动界面重组。

22、根据上述技术手段,通过获取kmp中的js代码文件和.d.ts类型定义文件,基于.d.ts类型定义文件建立的类型契约在js代码文件中注册bridge事件处理器,再通过同步事件处理器将bridge事件处理器接收到的状态变更值写入appstorage或arkui可观察状态容器以驱动界面重组,克服了鸿蒙侧无法直接识别kmp状态变更事件、跨运行时状态映射链路断裂导致arkui无法响应式刷新的技术障碍,达到了在鸿蒙侧实现类型安全的跨端状态同步、让kmp状态变化精准触发arkui原生界面重组的技术效果。

23、进一步的,所述方法还包括:通过所述bridge事件处理器,接收所述kmp发送的原生调用请求或第三库调用请求;提取所述原生调用请求或所述第三库调用请求中的方法标识与参数;基于所述方法标识与参数,调用相对应的鸿蒙原生能力或第三库能力,得到调用响应;基于所述类型契约,通过所bridge事件处理器,将所述调用响应返回至所述kmp。

24、根据上述技术手段,通过bridge事件处理器接收kmp发送的原生调用请求或第三方库调用请求,提取请求中的方法标识与参数,基于该标识与参数调用对应的鸿蒙原生能力或第三方库能力得到调用响应,再依托类型契约通过bridge事件处理器将调用响应返回至kmp,克服了鸿蒙侧与kmp侧跨运行时调用链路不通、参数类型不匹配导致的原生能力调用失败的技术障碍,达到了实现kmp侧无感知调用鸿蒙全量原生能力、保障跨端双向调用类型安全与数据一致性的技术效果。

25、进一步的,所述方法还包括:在组件化场景中,通过umbrella入口访问kmp共享的kotlin代码,所述umbrella入口被配置为收敛并封装kmp中各业务模块需向鸿蒙系统暴露的跨端共享接口集。

26、根据上述技术手段,通过在组件化场景中依托umbrella入口访问kmp共享的kotlin代码,利用该umbrella入口收敛并封装kmp中各业务模块需向鸿蒙系统暴露的跨端共享接口集,克服了组件化架构下跨端接口分散暴露、调用链路碎片化导致鸿蒙侧接入逻辑复杂、多模块接口难以统一管控的技术障碍,达到了大幅简化鸿蒙侧kmp能力接入流程、实现跨端接口全局统一维护、降低多业务模块协同适配成本的技术效果。

27、一种kmp与鸿蒙系统的跨端通信装置,应用于kmp,包括:编译模块,用于将kmp共享的kotlin代码编译为js代码文件和.d.ts类型定义文件;第一通信模块,用于在所述js代码文件中构建bridge工具模块,并基于所述.d.ts类型定义文件建立鸿蒙系统调用的类型契约,所述类型契约用于向所述鸿蒙系统暴露类型安全的调用接口;第一同步模块,用于在所述js代码文件中构建跨端状态桥接器,通过所述跨端状态桥接器监测所述kmp的状态变化,并通过所述bridge工具模块基于所述类型契约将状态变更信息同步至所述鸿蒙系统。

28、一种kmp与鸿蒙系统的跨端通信装置,应用于鸿蒙系统,包括:获取模块,用于获取kmp中的js代码文件和.d.ts类型定义文件;第二通信模块,用于基于所述.d.ts类型定义文件建立的类型契约,在所述js代码文件中注册bridge事件处理器,以响应所述kmp发送的调用请求,所述类型契约用于指示所述kmp向所述鸿蒙系统暴露类型安全的调用接口;

29、第二同步模块,用于通过同步事件处理器,将接收到的状态变更值写入appstorage或arkui可观察状态容器,以驱动界面重组。

30、一种电子设备,包括:存储器,处理器以及交互接口;

31、存储器存储计算机执行指令;

32、处理器执行存储器存储的计算机执行指令,使得处理器执行如上述任一项的方法。

33、一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如上述任一项的方法。

34、本发明的有益效果:

35、(1)本发明通过全链路类型契约与双向桥接机制,解决kmp与鸿蒙跨运行时的类型不匹配、调用链路断裂问题,得到类型安全、稳定可靠的跨端双向调用能力;

36、(2)本发明通过增量状态比对与arkui状态容器映射机制,解决kmp侧状态变更无法精准驱动鸿蒙ui刷新的问题,得到低冗余、高实时的跨端状态同步与原生级界面响应效果;

37、(3)本发明通过umbrella入口统一收敛跨端共享接口,解决组件化场景下跨端接口分散、接入逻辑复杂的问题,得到轻量化接入、易维护可扩展的工程化落地支撑体系。