Kuikly 原生 API 扩展机制对比总结

Kuikly 原生 API 扩展机制对比总结,小程序跳过

扩展原生API

1. ​Kuikly 侧(通用)​

  • 核心类 ​:继承 Module基类,实现 moduleName()方法。

  • 通信方式​:

    • 异步调用 :通过 toNative方法传递 callbackFn接收返回值。
    • 同步调用 :通过 toNative设置 syncCall=true直接返回结果。
  • 注册方式 ​:在 Pager子类中重写 createExternalModules,以键值对形式注册模块(键名需与原生侧一致)。

  • 辅助方法 ​:提供 syncToNativeMethodasyncToNativeMethod简化调用。

2. ​Android 侧

  • 核心类 ​:继承 KuiklyRenderBaseModule,重写 call方法(区分参数类型)。

  • 方法实现​:

    • 通过 method参数匹配 Kuikly 侧方法名。
    • 无返回值方法:直接执行原生逻辑(如 Log.d)。
    • 异步回调:通过 KuiklyRenderCallback.invoke返回结果。
    • 同步返回:直接 return结果(如字符串)。
  • 注册方式 ​:在 registerExternalModule中调用 moduleExport,键名需与 Kuikly 侧一致。

3. ​iOS 侧

  • 核心类 ​:继承 KRBaseModule,类名必须与 Kuikly 侧注册名一致(如 KRMyLogModule)。

  • 方法实现​:

    • 方法名与 Kuikly 侧 toNativemethodName严格匹配。
    • 参数固定为 NSDictionary,通过 HR_PARAM_KEY提取参数。
    • 异步回调:从参数中获取 KuiklyRenderCallback并调用。
    • 同步返回:直接 return结果。
  • 特点​:依赖运行时动态查找方法,需严格命名。

4. ​鸿蒙侧(ArkTS)​

  • 核心类 ​:继承 KuiklyRenderBaseModule,需实现 syncMode()(决定是否支持同步调用)。

  • 方法实现​:

    • 通过 switch-case分发 method调用。
    • 异步回调:调用 callback函数返回结果。
    • 同步返回:直接 return结果。
  • 注册方式 ​:在 getCustomRenderModuleCreatorRegisterMap中通过 Map注册模块。


关键对比点

基类 方法匹配方式 回调机制 同步支持 注册方式
Kuikly Module 方法名直接调用 CallbackFn或同步返回 是(syncCall createExternalModules映射注册
Android KuiklyRenderBaseModule call方法内 switch KuiklyRenderCallback.invoke moduleExport动态注册
iOS KRBaseModule 方法名动态反射 从参数提取 callback调用 类名必须与 Kuikly 侧一致(自动注册)
鸿蒙 KuiklyRenderBaseModule call方法内 switch 直接调用 callback参数 syncMode()返回 true Map键值对注册

注意事项

  1. 命名一致性​:Kuikly 与原生侧的模块名、方法名必须严格一致(iOS 侧类名需完全匹配)。

  2. 线程模型​:

    • Android/iOS 异步回调默认在主线程,同步调用在子线程。
    • 鸿蒙需通过 syncMode()显式声明是否支持同步。
  3. 参数传递​:

    • 基本类型/数组可直接传递,JSON 需序列化为字符串。
    • iOS 参数统一封装为 NSDictionary,鸿蒙/Android 可灵活处理。

通过这套机制,Kuikly 实现了跨平台 API 的统一扩展,开发者只需遵循各端规范即可复用原生能力。

相关推荐
吃糖的小孩44 分钟前
从只读页面到可控真实探针:我如何给 Owner Console 加手动诊断
前端
谷无姜44 分钟前
为什么你的性能优化无效?可能是"木桶效应"在作祟
前端·性能优化
雾非雾1 小时前
《基于具身交互智能数字人技术:如何打造AI数字人宣讲平台"红厅智播”》
前端
Revolution611 小时前
一段 JavaScript 代码执行时,到底发生了什么
前端·javascript
智能起源1 小时前
关于元素层级过多,导致压祯的问题(使用winform或者WPF应用的webview组件嵌套网页时,动效卡顿问题)
前端
Old Uncle Tom2 小时前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融
IT_陈寒2 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
东方小月2 小时前
从0开发一个 Coding Agent(一):前言
前端·人工智能·typescript
恋猫de小郭2 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter