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 的统一扩展,开发者只需遵循各端规范即可复用原生能力。

相关推荐
一枚前端小能手9 小时前
📜 `<script>`脚本元素 - 从加载策略到安全性与性能的完整指南
前端·javascript
掘金安东尼10 小时前
TypeScript为何在AI时代登顶:Anders Hejlsberg 的十二年演化论
前端·javascript·面试
yong999010 小时前
MATLAB倍频转换效率分析与最佳匹配角模拟
开发语言·前端·matlab
面向星辰10 小时前
扣子开始节点和结束节点
java·服务器·前端
执携10 小时前
Vue Router (命名视图)
前端·javascript·vue.js
John_Rey10 小时前
Rust类型系统奇技淫巧:幽灵类型(PhantomData)——理解编译器与类型安全
前端·安全·rust
含若飞11 小时前
Vue 中 `watch` 与 `this.$watch` 使用指南
前端·javascript·vue.js
无名小兵11 小时前
前端渲染大体积 多页面pdf
前端
c0detrend11 小时前
读诗的时候我却使用了自己研发的Chrome元素截图插件
前端·chrome
希冀12312 小时前
【Vue】第五篇
前端·javascript·vue.js