网易首页 > 网易号 > 正文 申请入驻

腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架

0
分享至

在 3月的时候通过我们大致知道了 Kuikly 的基本情况,Kuikly 是一个面向终端技术栈的跨端开发框架,完全基于kotlin语言开发,提供原生的性能和体验。

❝ 按照官方的说法:Kuikly是基于Kotlin Multiplatform 的 UI 与逻辑全面跨端综合解决方案,由腾讯大前端领域 Oteam(公司级)推出,目的在于提供一套一码多端、极致易用、动态灵活的全平台高性能开发框架。

当然,虽然是全平台,但是目前暂时只开源了 Android 和 iOS,鸿蒙部分 5 月才开源,而 Web 和 小程序暂定是 Q2:

那 Kuikly 如何实现跨平台?目前 Kuikly 主要是在 KMP 的基础上实现的自研 DSL 来构建 UI ,比如iOS 平台的 UI 能力就是 UIkit,而大家更熟悉的 Compose 支持,目前还处于开发过程中:

img

❝ SwiftUI 和 Compose 无法直接和 Kuikly 一起使用,但是 Kuikly 可以在 DSL 语法和 UI 组件属性对齐两者的写法,变成一个类 Compose 和 SwiftUI 的 UI 框架,也就是 Compose DSL 大概就是让 Kuikly 更像 Compose ,而不是直接适配 Compose?

那么大家可能会有疑问,既然借助了平台控件的能力,那它和 RN 有什么区别?

首先 Kuikly 是直接从编译产物的角度实现跨平台,它的编译产物与原生一致,和 RN 是在运行时转换为原生控件不同,Kotlin 是直接编译为对应平台的原生代码,所以在运行时其实就类似原生 code 。

那 Kuikly 又如何保证多端 UI 一致?答案是 Kuikly 实现了自己的一套「薄原生层」

首先在 Kotlin 层,Kuikly 将虚拟 Dom 方案优化为直调方案,这里 Kotlin View API 直调,避免 JSON 序列化/反序列化损耗,同时只维护一棵树,更轻量和O(1)同步UI更新:

之后,Kuikly 使用“非常薄”的原生层,该原生层只暴露最基本和无逻辑的 UI 组件(原子组件),也就是 Kuikly 在 UI 上只用了最基本的原生层 UI ,真正的 UI 逻辑主要在共享的 Kotlin 代码来实现:

❝ 通过将 UI 逻辑抽象到共享的 Kotlin 层,减少平台特定 UI 差异或行为差异的可能性,「薄原生层」充当一致的渲染目标,确保 Kotlin 定义的 UI 元素在所有平台上都以类似的方式显示。
img

也就是说,Kuikly 虽然会依赖原生平台的控件,但是大部分控件的实现都已经被「提升」到 Kuikly 自己的 Kotlin 共享层,目前 Kuikly 实现了 60% UI 组件的纯 Kotlin 组合封装实现,不需要 Native 提供原子控件

所以基于上面的内容,我们再来看 Kuikly UI 官方提供的结构图,是不是就清晰了很多:

Core 模块提供了统一的 UI 逻辑实现和 API 接口

  • Render 模块负责在 Android、iOS、HarmonyOS、H5 以及各种小程序等多个平台上实现 UI 的渲染 。

  • 另外在 Kuikly 领域,还有一套名为 KuiklyBase 服务,它是独立于 Kuikly UI 之外,为 Kuikly 提供基础设施支持,比如为 iOS、Android 和鸿蒙三大移动平台提供了统一的底层基建能力:

    KuiklyBase 强调在不同平台之间实现高性能的逻辑共享 ,它更像是 KMP 的进一步定制,KuiklyBase 兼容标准的 Kotlin Multiplatform 组件,允许复用成熟的 KMP 组件,比如有些业务各端都已经有 UI 层的实现,仅仅需要非 UI 的业务逻辑实现跨端,而通过 KuiklyBase 的基础设施,也可以满足这种场景的需求。

    另外 KuiklyBase 还提供了对 HarmonyOS 平台的全面支持,包括 KN HarmonyOS 编译、调试和构建能力。

    ❝ 也就是 Kuikly 在鸿蒙有支持 Kotlin Native 高性能版本。

    同时,KuiklyBase 还提供了强大的多线程和协程能力,支持复杂业务逻辑的跨平台并行处理,以满足高性能场景的需求。

    并且在开发工具链方面,KuiklyBase 覆盖了从脚手架搭建到调试、构建、发布和监控的整个流程,特别是支持和 Bugly 和 Shiply 联动提供配套能力。

    最后,KuiklyBase 还内置了性能优化工具,并针对 HarmonyOS 和 iOS 提供了优化的调试体验 。

    ❝ 目前使用 KuiklyBase 业务的团队:腾讯视频、浏览器、新闻、输入法、理财通····

    当然,这里需要注意的是, KuiklyBase 和 KuiklyUI 一起使用,某种情况下会存在场景冲突:

    • KuiklyUI 的 iOS 和鸿蒙动态化方案主要利用了 Kotlin/JS 编译成 js 产物,动态下发到宿主的js引擎去执行

    • KuiklyBase 利用 Kotlin/Native 编译成高性能的二进制产物执行,因此没有解耦 KuiklyBase 的 KMP 组件,在 iOS 和鸿蒙在动态化场景需要注意兼容

    所以,动态化决定了你优先使用哪个支持:

    • 无动态化诉求场景:KuiklyBase + KuiklyUI = 完美

    • 有动态化诉求场景:KuiklyBase 兼容 js 动态化方案还没完成,短期方案可利用 KuiklyUI 的 Module 方案来作为替代

    上面问题的核心其实是,KuiklyBase 组件因为是 KMP 组件,没有和平台做解耦,动态化时产物会运行在 js 环境中,由于 js 单线程,无法直接提供平台能力等的限制,所以决定了动态化部分不能直接使用多线程和平台能力。

    所以业务在开发过程中需要特别注意在调用平台 KMP 组件能力的时候,需要通过 Kuikly Module 方式进行解耦调用,避免直接依赖

    ❝ Kuikly 作为一个跨端的 UI 框架, 他本身不具备调用平台 API 的能力, 但是Kuikly提供了一套Module机制,可以通过Module机制将平台的 API 暴露给 Kuikly侧调用,同时 Kuikly内置了一些通用的 Module, 如果这些 Module不满足 业务诉求时, 可以通过扩展原生 API 自定义Module, 将更多的宿主平台 API 暴露给 Kuikly侧使用。

    在 KuiklyUI 内部,模块页面分为两种类型:可动态化类型(内置和动态灵活切换)和纯内置类型(只能内置) :

    而可动态化类型部分:

    • 不可直接依赖平台能力

    • 不可使用多线程和协程

    • 不可依赖内置部分

    • 不可依赖使用到了平台能力或多线程协程等能力的 KMP 组件,如果无法避免需要使用相关能力,就需要前面提到额 Kuikly Module 进行解耦调用

    ❝ 核心就是,动态化的只能是 JS 。

    最后,以下是 Kuikly 工程的项目结构说明:

    .
    ├── core                    # 跨平台模块,实现各个平台响应式 UI、布局算法、Bridge 通信等核心能力
      ├── src
        ├── commanMain            # 跨平台共享代码、定义跨平台接口 
        ├── androidMain           # Android 平台实现代码 (aar)
        ├── jvmMain               # 泛 JVM 平台代码(不涉及 Android API)(jar)
        ├── iosMain               # iOS 平台实现代码(framework)
    ├── core-render-android    # android 平台的渲染器模块
    ├── core-render-ios        # iOS 平台的渲染器模块
    ├── core-annotations       # 注解模块,定义业务注解 @Page
    ├── core-ksp               # 注解处理模块,生成 Core 入口文件 
    ├── buildSrc               # 编译脚本,用于编译、打包、分包产物相关脚本
    ├── demo                   # DSL 示例代码 
    ├── androidApp             # Android 宿主壳工程
    └── iosApp                 # iOS 宿主壳工程

    还有需要注意的是,之前的 Kuikly 的插件还不支持 K2 模式,所以如果你的 IDE 是 K2 模式,需要关闭 K2 才能支持插件:

    而一天之后,已经是 1.0.3 版本,此时 KuiklyTemplate 插件也支持了最新的 K2 模式:

    另外,Kuikly 未来也会兼容 Compose DSL ,但是大概率不会是原本的 Compose ,而是类 Compose 的代码组织方式。

    ❝ 另外,在混合开发领域,在原有 App 集成 Kuikly ,可以把它简单当作如系统 webview 的概念来使用,但是如果在原生列表中嵌入 Kuikly view,目前会因为 Kuikly 本身的异步机制,导致无法同原生列表其它卡片同时生存layout和view结果,造成显示上的不同步。

    可以看到,Kuikly 总得来说还是一个类 RN 框架,但是它又不像 RN 一样的运行时 OEM 原生控件,而是在编译成完成转化为原生代码,并且它抽象出了统一的 「薄原生层」,让大量高阶控件在共享的 Kotlin 层完成实现,只让少量 native 层提供原子组件能力,从而尽可能实现 UI 的多端统一,类似于把原生控件单做 “Canvas" 效果使用。

    ❝ 总的来说,Kuikly 既能实现接近原生的性能体验和原生的开发体验,又能提供良好的动态化能力,看起来还是不错的选择。

    最后,官方表示 Kuikly 对于 Android 的同学家基本没有学习成本,只要使用过响应式开发的都能上手,而对于 iOS 同学而已,大概就是需要熟悉一下 Kotlin 语法,不过 Kotlin 和 Swift 相近度挺高,所以上手也不会太困难。

    目前 Kuikly 已经在 QQ、QQ音乐、QQ浏览器、腾讯新闻、搜狗输入法、应用宝、全民K歌、酷狗音乐、酷我音乐、自选股、ima.copilot、微视等多款产品中使用,那么,你觉得你会愿意尝试 Kuikly 吗?

    • https://kuikly.tds.qq.com/

    • https://github.com/Tencent-TDS/KuiklyUI/

    特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

    Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

    相关推荐
    热点推荐
    牛肉顶多注个水猪肉顶多催个肥,唯有三文鱼全程cosplay

    牛肉顶多注个水猪肉顶多催个肥,唯有三文鱼全程cosplay

    富贵说
    2026-04-14 23:15:09
    杭州男子突然收到16年前的停车欠费通知,比他买车还要早两三年!怎么回事?

    杭州男子突然收到16年前的停车欠费通知,比他买车还要早两三年!怎么回事?

    都市快报橙柿互动
    2026-05-25 11:11:07
    网友将问界新车路测画面发给国家反诈中心,被认定为AI生成

    网友将问界新车路测画面发给国家反诈中心,被认定为AI生成

    西虹市闲话
    2026-05-26 16:43:17
    这款游戏居然能"作弊"人生?控制台指令全解析

    这款游戏居然能"作弊"人生?控制台指令全解析

    浅遇时光
    2026-05-27 00:27:02
    今日,海南局部实测最高温达42.5℃!这轮热浪算异常吗?啥时候缓解?气象专家最新解读来了

    今日,海南局部实测最高温达42.5℃!这轮热浪算异常吗?啥时候缓解?气象专家最新解读来了

    新浪财经
    2026-05-27 19:46:36
    山东一民企飞无人机催县农业局“快还钱”,当地回应:正协商解决

    山东一民企飞无人机催县农业局“快还钱”,当地回应:正协商解决

    上游新闻
    2026-05-26 19:50:19
    5月26日中国女排新消息!2人离队、4人归队,世联赛赛程时间如下

    5月26日中国女排新消息!2人离队、4人归队,世联赛赛程时间如下

    娱说瑜悦
    2026-05-27 13:44:29
    深夜利空,29股减持,9股提示风险,9股收监管函,1股被立案

    深夜利空,29股减持,9股提示风险,9股收监管函,1股被立案

    风风顺
    2026-05-27 00:35:03
    莎拉高举反华大旗,两周三度喊话军方,彻底推翻老杜六年外交布局

    莎拉高举反华大旗,两周三度喊话军方,彻底推翻老杜六年外交布局

    健身狂人
    2026-05-26 18:45:11
    商家你让我颜面尽失!

    商家你让我颜面尽失!

    落纸生花创意手工
    2026-05-27 12:10:27
    夏天,三个豆子一起煮,湿气跑了、脾胃棒了,睡得香了,正当时

    夏天,三个豆子一起煮,湿气跑了、脾胃棒了,睡得香了,正当时

    阿龙美食记
    2026-05-26 14:15:09
    离职一年,公司竟让我飞来修设备,财务报销9千差旅费,领导懵了

    离职一年,公司竟让我飞来修设备,财务报销9千差旅费,领导懵了

    红豆讲堂
    2025-05-15 13:10:03
    历史不会重演,但会惊人相似:中国黄金价格极可能重走2015年老路

    历史不会重演,但会惊人相似:中国黄金价格极可能重走2015年老路

    王二哥老搞笑
    2026-05-27 20:40:55
    杰林·威廉姆斯三分命中后凝视文班亚马

    杰林·威廉姆斯三分命中后凝视文班亚马

    温柔且自由
    2026-05-28 01:54:09
    内心强大,遇事从不慌的三大星座

    内心强大,遇事从不慌的三大星座

    星座不求人
    2026-05-27 20:04:52
    国内将逐渐停止"肠镜检查"?做完对身体有无影响?医生告诉您真相

    国内将逐渐停止"肠镜检查"?做完对身体有无影响?医生告诉您真相

    健康科普365
    2026-05-27 20:25:06
    四个省会城市市政府领导班子调整

    四个省会城市市政府领导班子调整

    上观新闻
    2026-05-27 10:08:07
    三个儿子赖在家啃老22年,夫妇一气之下离家,12年后返乡两人傻住了

    三个儿子赖在家啃老22年,夫妇一气之下离家,12年后返乡两人傻住了

    唠叨情感屋
    2025-05-15 22:05:26
    爷爷不泡茶的英文名,哪个人才想出来的?网友:英文八级翻译,地狱级好笑...

    爷爷不泡茶的英文名,哪个人才想出来的?网友:英文八级翻译,地狱级好笑...

    品牌新
    2026-05-26 10:58:21
    吉利正式官宣:5月28日,新车上市

    吉利正式官宣:5月28日,新车上市

    科技堡垒
    2026-05-25 12:25:51
    2026-05-28 02:12:49
    君伟说
    君伟说
    分享职场故事
    439文章数 48关注度
    往期回顾 全部

    科技要闻

    韬定律:全球在卷纳米数 华为换了一把尺子

    头条要闻

    特朗普:伊朗即使放弃高浓缩铀也无法获得解除制裁

    头条要闻

    特朗普:伊朗即使放弃高浓缩铀也无法获得解除制裁

    体育要闻

    这群老阿姨,是最硬核的马刺球迷

    娱乐要闻

    王鹤棣风波连累父亲炸串店遭差评?

    财经要闻

    中国半导体的阳谋

    汽车要闻

    限时补贴价9.28-10.98万 MG 4X正式上市

    态度原创

    游戏
    艺术
    本地
    健康
    公开课

    IGN年度第三款满分神作!丰富度不输老头环、塞尔达

    艺术要闻

    蚂蚁新总部封顶了!大圆环到底有啥魔力,科技公司都抢着用?

    本地新闻

    用剪纸的方式,打开江苏扬州

    打外泌体会比干细胞更安全吗

    公开课

    李玫瑾:为什么性格比能力更重要?

    无障碍浏览 进入关怀版