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

145 阅读2分钟

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注册模块。


关键对比点

基类方法匹配方式回调机制同步支持注册方式
KuiklyModule方法名直接调用CallbackFn或同步返回是(syncCallcreateExternalModules映射注册
AndroidKuiklyRenderBaseModulecall方法内 switchKuiklyRenderCallback.invokemoduleExport动态注册
iOSKRBaseModule方法名动态反射从参数提取 callback调用类名必须与 Kuikly 侧一致(自动注册)
鸿蒙KuiklyRenderBaseModulecall方法内 switch直接调用 callback参数syncMode()返回 trueMap键值对注册

注意事项

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

  2. 线程模型​:

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

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

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