1 Kuikly框架概述
Kuikly是騰訊大前端領域Oteam(公司級)推出的面向客戶端技術的跨端開發(fā)框架,完全基于Kotlin語言開發(fā),提供原生的性能和體驗。作為基于Kotlin Multiplatform (KMP) 的UI與邏輯全面跨端綜合解決方案,Kuikly旨在提供一套一碼多端、極致易用、動態(tài)靈活的全平臺高性能開發(fā)框架。截至目前,Kuikly已支持Android、iOS、鴻蒙三大移動平臺,并支持Web和小程序平臺。
1.1 核心特性與優(yōu)勢
Kuikly框架具有以下幾個顯著特點和優(yōu)勢:
- 一碼多端:支持使用單一代碼庫同時輸出Android、iOS、鴻蒙、Web和小程序五端應用。這極大地降低了多平臺開發(fā)的成本和維護工作量。
- 原生性能體驗:得益于KMP跨平臺能力,Kuikly將Kotlin代碼編譯成各個平臺原生產(chǎn)物(如Android的.aar和iOS的framework),從而獲得接近原生平臺的執(zhí)行性能。測試數(shù)據(jù)顯示,其頁面首屏耗時與原生基本一致,內(nèi)存占用也相差無幾。
- Kotlin語言驅動:完全采用Kotlin作為開發(fā)語言,使用原生IDE(Android Studio/VSCode)和性能分析工具,實現(xiàn)了從業(yè)務代碼到框架代碼層的統(tǒng)一技術棧開發(fā)閉環(huán)。
- 雙開發(fā)范式:支持自研聲明式+響應式DSL,同時也在逐步支持Compose DSL,提供靈活的UI開發(fā)選擇。
- 動態(tài)化支持:支持頁面級動態(tài)化能力,可按需切換內(nèi)置和動態(tài)化模式,具有頁面維度更新、性能高、無hook穩(wěn)定性高等優(yōu)勢。
- 輕量穩(wěn)定:框架設計精巧,無復雜外部依賴,安裝包體積增量小,穩(wěn)定性和可維護性高。
Kuikly整體架構

2 Kuikly核心原理剖析
2.1 架構設計理念
Kuikly框架在設計上踐行與原生一致的技術棧理念,減少開發(fā)者的技術??缭?。它復用終端的開發(fā)語言、工具和生態(tài),擁有接近原生性能和原生渲染,同時采用聲明式(類似Compose和SwiftUI)和輕量的設計思路。整個框架架構分為三個核心層次:
跨端Core層:包含自研的聲明+響應式Kuikly DSL與標準的Compose DSL(建設中),負責高性能的DSL組件樹映射生成Native UI樹的核心邏輯,包括2棵樹映射方案、精細化的O(1) Diff更新算法、渲染指令生成等邏輯。此層還重新實現(xiàn)了大量的復雜高階組件(如ListView、ViewPager、Waterfall等),保證多平臺一致性。
Native渲染層:特點是輕量化,提供統(tǒng)一的平臺接口層,包含最小化的原子渲染組件(僅Text、Image、Input、ScrollView等少量組件)。該層還提供API實現(xiàn)模塊,供各平臺擴展統(tǒng)一API給跨平臺層使用。
KuiklyBase基礎設施:提供鴻蒙Kotlin/Native適配以支持鴻蒙高性能運行,以及調(diào)試、質(zhì)量監(jiān)控、發(fā)布、組件生態(tài)等配套基礎設施。
2.2 渲染機制與薄原生層設計
Kuikly通過自研DSL構建UI,在不同平臺上映射到不同的原生UI系統(tǒng)。在iOS平臺使用UIKit,在Android平臺則可以使用原生View系統(tǒng)或Compose(計劃中)。與其他跨端框架不同的是,Kuikly實現(xiàn)了自己的"薄原生層"。
這個薄原生層只暴露最基本和無邏輯的UI組件(原子組件),真正的UI邏輯主要在共享的Kotlin代碼中實現(xiàn)。通過將UI邏輯抽象到共享的Kotlin層,減少平臺特定UI差異或行為差異的可能性,薄原生層充當一致的渲染目標,確保Kotlin定義的UI元素在所有平臺上都以類似的方式顯示。
目前Kuikly實現(xiàn)了60% UI組件的純Kotlin組合封裝實現(xiàn),不需要Native提供原子控件。僅Text、Image、Input、ScrollView 等少量組件放到Native層。最容易出現(xiàn)不一致的高階組件都通過Kotlin實現(xiàn),比如List列表控件,Kuikly通過對齊Native的List內(nèi)部實現(xiàn)原理,然后再用Kotlin重寫一次,從而實現(xiàn)真正的高一致性UI組件跨平臺實現(xiàn)。
2.3 性能優(yōu)化策略
Kuikly以高性能、動態(tài)化為框架核心目標,在多個層面實施了性能優(yōu)化策略:
- 編譯期優(yōu)化:利用KMP將Kotlin代碼編譯成各個平臺的原生產(chǎn)物,消除解釋執(zhí)行或虛擬機運行時的性能開銷。
- 渲染優(yōu)化:采用O(1) Diff算法實現(xiàn)精細化的UI更新,避免不必要的全局重繪。
- 內(nèi)存管理:引入對象復用機制,對高頻創(chuàng)建和釋放的組件實施白名單管理的復用池,減少內(nèi)存分配和垃圾回收的開銷。
- 文本渲染專項優(yōu)化:在鴻蒙平臺上,通過利用系統(tǒng)提供的文本繪制接口進行直調(diào)繪制,復用布局結果,徹底解決文本重布局問題。
3 多平臺Demo實現(xiàn)
參考官方鏈接:
https://kuikly.tds.qq.com/QuickStart/env-setup.html
4 Kuikly DSL與Compose DSL
Kuikly 框架提供了兩種 UI 開發(fā)方式:自研的 Kuikly DSL 和兼容 Jetpack Compose 語法的 Compose DSL。它們共享 Kuikly 的核心架構與多端支持,但在實現(xiàn)原理和特性上有所不同。下面這個表格匯總了它們的主要區(qū)別,之后我會進一步解釋。
| 特性維度 | Kuikly DSL (自研) | Kuikly Compose DSL (Beta) |
|---|---|---|
| 設計理念與語法 | 自研聲明式+響應式DSL | 兼容 Jetpack Compose 語法與 API |
| 渲染機制 | 原生控件渲染 (通過"薄原生層"映射為各平臺原生UI組件) | 原生控件渲染 (復用 Kuikly 通用渲染層,非 Skia 自繪) |
| 跨平臺支持 | Android, iOS, HarmonyOS, Web, 小程序,Desktop | Android, iOS, HarmonyOS, H5(alpha), 微信小程序(alpha),Desktop(規(guī)劃中) |
| 動態(tài)化能力 | ? 支持 (頁面級動態(tài)化,核心優(yōu)勢) | ? 支持 (繼承 Kuikly 動態(tài)化能力) |
| 性能特點 | 接近原生 (iOS平臺編譯為Native代碼,鴻蒙版實測原生級表現(xiàn)) | 接近原生 (非Skia自繪,復用Kuikly原生渲染優(yōu)勢) |
| 包體積影響 | 較小 (Android端約300KB, iOS端約1.2MB) | 相對較小 (基于Kuikly原生渲染,無需Skia引擎) |
| 學習成本 | 需學習Kuikly自研DSL | 對Android Compose開發(fā)者更友好 |
| 現(xiàn)狀與成熟度 | 已正式開源,內(nèi)部廣泛應用 | Beta版 |
4.1.核心共通點
盡管存在差異,但兩者都基于 Kotlin Multiplatform (KMP) 技術,并共享 KuiklyBase 提供的基礎設施(如調(diào)試、構建、監(jiān)控),都致力于實現(xiàn) “一碼多端” 。
4.2.如何選擇?
- 追求極致的原生性能、動態(tài)化能力和更穩(wěn)定的生產(chǎn)環(huán)境:Kuikly DSL 是當前更成熟穩(wěn)妥的選擇。
- 項目需要覆蓋 Web 或小程序平臺:Kuikly DSL 對這些平臺的支持已在規(guī)劃中。
- 團隊具備豐富的 Android Jetpack Compose 開發(fā)經(jīng)驗,且優(yōu)先追求開發(fā)效率與代碼風格統(tǒng)一:可以嘗試 Kuikly Compose DSL,但需留意其 Beta 狀態(tài)。
- 應用高度依賴 Skia 自繪以實現(xiàn)極致自定義 UI 或復雜動畫:Kuikly 的兩種 DSL 目前均采用原生渲染,可能不是最優(yōu)先選擇。你可以了解騰訊的 ovCompose(基于 Compose Multiplatform 和 Skia 自繪)。
4.3.總結
Kuikly 的兩種 DSL 提供了側重點不同的跨端 UI 解決方案:
- Kuikly DSL 更像是一個“性能優(yōu)先、多端覆蓋” 的務實派,自研道路保證了控制力和優(yōu)化深度。
- Kuikly Compose DSL 則像一個“體驗優(yōu)先、生態(tài)兼容” 的革新派,旨在降低開發(fā)者學習成本并擁抱更廣泛的 Compose 生態(tài)。
選擇哪條路徑,取決于你的項目優(yōu)先級和團隊技術背景。希望這些分析能幫助你做出更合適的決策。
5 KuiklyUI與KuiklyBase
5.1 功能定位與職責劃分
Kuikly框架由兩個核心部分組成:KuiklyUI和KuiklyBase。這兩個部分各有側重,共同構成了完整的Kuikly跨端開發(fā)生態(tài)。
KuiklyUI是框架的UI部分,主要負責:
- 提供聲明式UI開發(fā)范式,包括自研DSL和Compose DSL兩種選擇
- 實現(xiàn)跨平臺UI渲染,將Kotlin UI代碼映射到各平臺原生UI組件
- 管理UI生命周期和狀態(tài)變化
- 處理用戶交互和事件響應
- 支持頁面級動態(tài)化更新
KuiklyBase則是框架的基礎設施部分,主要提供:
- 跨平臺邏輯共享能力,支持非UI業(yè)務的邏輯跨端
- 平臺適配層,特別是鴻蒙Kotlin/Native適配
- 調(diào)試工具和性能監(jiān)控設施
- 構建系統(tǒng)和發(fā)布工具
- 組件生態(tài)和依賴管理
5.2 協(xié)作關系與集成方式
KuiklyUI與KuiklyBase之間存在密切的協(xié)作關系。KuiklyUI依賴于KuiklyBase提供的底層基礎設施和能力,而KuiklyBase則通過KuiklyUI驗證和優(yōu)化其功能設計。
在實際項目中,開發(fā)者可以根據(jù)需要選擇使用完整的Kuikly(包含UI和Base)或僅使用KuiklyBase。對于已經(jīng)有現(xiàn)有UI層,只需要共享非UI邏輯的場景,可以單獨使用KuiklyBase;對于全新項目,則可以使用完整的Kuikly框架。
表:KuiklyUI與KuiklyBase的關系
| 特性 | KuiklyUI | KuiklyBase |
|---|---|---|
| 核心功能 | UI渲染、交互管理 | 基礎設施、工具鏈 |
| 使用場景 | 全新UI開發(fā) | 邏輯共享、現(xiàn)有項目改造 |
| 動態(tài)化支持 | 頁面級動態(tài)化 | 邏輯動態(tài)化 |
| 平臺支持 | Android、iOS、鴻蒙、Web、小程序 | Android、iOS、鴻蒙、Web、小程序 |
| 兼容性 | 需整體接入UI框架 | 可逐步接入,與現(xiàn)有代碼共存 |
5.3 實際應用場景
在騰訊內(nèi)部,KuiklyUI和KuiklyBase已經(jīng)被廣泛應用到多個產(chǎn)品中。例如,騰訊視頻、QQ瀏覽器、騰訊新聞等應用使用KuiklyUI開發(fā)全新的跨平臺頁面;而一些已有的成熟產(chǎn)品則選擇使用KuiklyBase來實現(xiàn)業(yè)務邏輯的跨端共享,同時保持現(xiàn)有的UI層不變。
這種靈活性使得Kuikly可以適應不同的遷移和改造場景:
- 全新項目:可使用KuiklyUI+KuiklyBase全面跨端開發(fā)
- 已有項目,需要共享邏輯:可單獨使用KuiklyBase實現(xiàn)非UI邏輯跨端
- 已有項目,需要完整改造:可逐步將UI遷移到KuiklyUI,同時使用KuiklyBase共享業(yè)務邏輯
6 Kuikly與ovCompose
6.1 背景與起源
ovCompose(online-video-compose)是騰訊視頻團隊基于Compose Multiplatform生態(tài)推出的跨平臺開發(fā)框架,旨在彌補JetBrains Compose Multiplatform不支持鴻蒙平臺的遺憾與解決iOS平臺原生UI混排受限的問題。
雖然ovCompose和Kuikly都是騰訊推出的跨端解決方案,且都基于KMP技術,但它們的設計目標和實現(xiàn)方式有顯著差異。兩者都依賴于KuiklyBase基礎設施,共享底層的KMP支持和鴻蒙編譯鏈。
6.2 技術架構差異
Kuikly和ovCompose在技術架構上有著根本性的區(qū)別:
Kuikly采用原生控件渲染方案,通過薄原生層將Kotlin UI代碼映射到各平臺原生UI組件。它的優(yōu)點是性能接近原生、內(nèi)存占用低、與平臺UI無縫集成;缺點是需要處理各平臺UI差異,實現(xiàn)復雜度高。
ovCompose采用Skia自繪渲染方案,通過Skia圖形庫在所有平臺上一致地繪制UI。它的優(yōu)點是UI一致性極高、不受平臺UI限制;缺點是內(nèi)存占用較高、與平臺UI混排復雜度高。
6.3 適用場景對比
根據(jù)不同的技術特點,Kuikly和ovCompose有各自適合的應用場景:
Kuikly更適合以下場景:
- 需要動態(tài)化能力的應用,特別是頁面級動態(tài)更新需求
- 追求最小內(nèi)存占用和最佳性能的應用
- 需要與平臺原生UI深度集成的項目
- 需要支持Web和小程序等多端的項目
ovCompose更適合以下場景:
- 要求極高UI一致性 across all platforms的應用
- 已有Compose代碼基礎,需要擴展到iOS和鴻蒙的平臺
- UI設計較為復雜,需要充分利用Compose強大布局能力的項目
- 不需要支持Web和小程序的純移動端項目
6.4 性能表現(xiàn)對比
在性能方面,Kuikly和ovCompose各有優(yōu)勢:
- 啟動速度:Kuikly因使用原生控件,啟動速度略優(yōu)于ovCompose
- 內(nèi)存占用:Kuikly的內(nèi)存占用通常低于ovCompose,特別是在低端設備上
- 渲染一致性:ovCompose的Skia自繪方案在所有平臺上提供像素級一致的渲染效果
- 混排能力:Kuikly與平臺原生UI混排更簡單自然,ovCompose需要通過三明治鏤空結構實現(xiàn)混排
6.5 開發(fā)體驗對比
從開發(fā)體驗角度來看,兩個框架也有所不同:
Kuikly提供兩種UI開發(fā)范式:自研DSL和Compose DSL。自研DSL針對跨平臺優(yōu)化,學習曲線較平緩;Compose DSL則對已有Compose經(jīng)驗的開發(fā)者更友好。
ovCompose完全兼容JetBrains Compose Multiplatform,對于已有Compose經(jīng)驗的開發(fā)者可以幾乎零學習成本上手,但對于新手需要學習Compose的概念和模式。
7 總結與展望
Kuikly作為騰訊開源的跨端開發(fā)框架,憑借其一碼多端、原生性能和動態(tài)化支持等特性,為多平臺應用開發(fā)提供了高效的解決方案。通過與KuiklyBase基礎設施的配合,Kuikly既可以全面跨端開發(fā)新應用,也可以逐步遷移現(xiàn)有項目。
與ovCompose相比,Kuikly更適合需要動態(tài)化能力、最小內(nèi)存占用和原生UI集成的場景,而ovCompose則更適合要求極高UI一致性和已有Compose基礎的項目。
隨著鴻蒙生態(tài)的不斷發(fā)展壯大,Kuikly的意義不僅在于為開發(fā)者提供一個多端開發(fā)框架,更在于它降低了鴻蒙應用開發(fā)門檻,促進了鴻蒙生態(tài)的繁榮。未來,隨著Web和小程序平臺的支持開源,Kuikly有望成為真正意義上的全平臺開發(fā)解決方案。
對于技術選型建議,可以根據(jù)項目需求選擇:
- 需要最大程度復用現(xiàn)有原生代碼或需要動態(tài)化 → 選擇Kuikly
- 要求像素級UI一致性或已有Compose經(jīng)驗 → 選擇ovCompose
- 需要支持Web和小程序 → 選擇Kuikly
- 純移動端應用且追求最佳性能 → 根據(jù)具體情況選擇
無論選擇哪種方案,Kuikly和ovCompose都代表了騰訊在跨端開發(fā)領域的重要貢獻,為開發(fā)者提供了更多的技術選擇和發(fā)展空間。