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

相关推荐
烛阴37 分钟前
用 Python 揭秘 IP 地址背后的地理位置和信息
前端·python
前端开发爱好者44 分钟前
尤雨溪官宣:"新玩具" 比 Prettier 快 45 倍!
前端·javascript·vue.js
why技术44 分钟前
从18w到1600w播放量,我的一点思考。
java·前端·后端
欧阳呀1 小时前
Vue+element ui导入组件封装——超级优雅版
前端·javascript·vue.js·elementui
清风徐来QCQ1 小时前
css总结
前端
天***88962 小时前
js封装一个双精度算法实现
开发语言·前端·javascript
Algebraaaaa2 小时前
什么是前端、后端与全栈开发,Qt属于什么?
开发语言·前端·qt
胡斌附体2 小时前
使用Electron创建helloworld程序
前端·javascript·electron·nodejs·pc
toobeloong2 小时前
Electron 从低版本升级到高版本 - webview通信的改造
前端·javascript·electron