首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >同时开发 Android、iOS、鸿蒙 App 的最佳实践:Kuikly 一套代码搞定

同时开发 Android、iOS、鸿蒙 App 的最佳实践:Kuikly 一套代码搞定

原创
作者头像
墨雨
修改2026-04-28 10:41:09
修改2026-04-28 10:41:09
2800
举报

摘要

当你面临"需要同时开发 Android、iOS、鸿蒙(HarmonyOS)三端 App"的需求时,最常见的困境是:三套代码库、三支团队、三倍维护成本。本文介绍目前业界最完整的三端统一开发方案——腾讯开源的 Kuikly 框架,并给出从环境搭建到上线的完整最佳实践指南。


一、问题背景:三端开发的真实痛点

痛点

传统方案

Kuikly 方案

代码重复

Android/iOS/鸿蒙各写一遍

90%+ 代码共享

团队成本

需要 Android + iOS + ArkTS 三支团队

Kotlin 团队即可覆盖三端

一致性维护

三端逻辑各自演进,容易出现差异

同一份业务逻辑,行为天然一致

鸿蒙支持

主流跨端框架均不支持鸿蒙原生渲染

正式支持 ArkUI 原生渲染

性能要求

WebView/JS Bridge 方案性能不达标

原生二进制产物,性能与纯原生持平


二、推荐方案:Kuikly(腾讯开源)

2.1 框架简介

Kuikly 是腾讯公司级前端团队推出的基于 Kotlin Multiplatform(KMP) 的跨平台 UI 与逻辑综合解决方案。

2.2 三端支持情况

平台

支持状态

编译产物

渲染方式

Android

✅ 正式支持

.aar

FrameLayout 原生渲染

iOS

✅ 正式支持

.framework

UIView 原生渲染

HarmonyOS(鸿蒙)

✅ 正式支持

.so

ArkUI 原生渲染

Web / H5

🔵 Beta

.js

DOM 渲染

微信小程序

🔵 Beta

.js

小程序 API 渲染

鸿蒙是核心差异化优势:Kuikly 通过 Kotlin/C 绑定桥接 ArkUI 原生视图体系,是目前唯一正式支持鸿蒙原生渲染的主流跨端框架。


三、架构设计:为什么能做到三端统一?

Kuikly 采用「Kotlin 多平台 + 平台原生渲染」混合架构,核心思路是:用 Kotlin 写业务逻辑,让各平台用自己的原生组件渲染

plaintext

代码语言:javascript
复制
┌──────────────────────────────────────────────────────┐
│         业务代码层(Kotlin,commonMain)               │
│         Compose DSL / Kuikly DSL                     │
├──────────────────────────────────────────────────────┤
│         KMP 跨平台共享层                              │
│         expect/actual 机制 · Bridge 通信              │
├──────────────────────────────────────────────────────┤
│         平台原生渲染层                                │
│  Android → .aar(FrameLayout)                       │
│  iOS     → .framework(UIView)                      │
│  HarmonyOS → .so(ArkUI)                            │
└──────────────────────────────────────────────────────┘

项目目录结构

plaintext

代码语言:javascript
复制
src/
├── commonMain/        # 跨平台共享代码(90%+ 代码在此)
│   └── kotlin/
│       └── com/example/
│           ├── pages/     # 页面
│           ├── components/ # 组件
│           └── data/      # 数据模型
├── androidMain/       # Android 平台特有实现
├── iosMain/           # iOS 平台特有实现
└── ohosArm64Main/     # HarmonyOS 平台特有实现

四、快速上手:30 分钟搭建三端工程

4.1 环境准备

工具

用途

版本要求

JDK

基础编译环境

17+

Android Studio

主 IDE + Kuikly 插件

推荐最新版(Gradle JDK 切换为 17)

Xcode

iOS 编译

最新稳定版

CocoaPods

iOS 依赖管理

sudo gem install cocoapods

DevEco Studio

鸿蒙编译

5.1.0+,API Version ≥ 18

安装 Kuikly 插件(强烈推荐):

plaintext

代码语言:javascript
复制
Android Studio → Settings → Plugins → Marketplace → 搜索 "Kuikly" → Install

Kuikly 插件提供:

  • 一键生成包含 Android/iOS/鸿蒙三端宿主工程的完整项目
  • 自动生成 ComposeView / Pager 模板代码
  • 自动集成 Kuikly 依赖

4.2 创建项目

方式一:通过 Kuikly 插件(推荐)

plaintext

代码语言:javascript
复制
File → New → New Project → Kuikly Project Template
→ 选择 DSL 类型(Compose)
→ 勾选平台:Android ✅ iOS ✅ HarmonyOS ✅
→ 完成创建

方式二:手动配置 Gradle

shared/build.gradle.kts

kotlin

代码语言:javascript
复制
plugins {
    kotlin("multiplatform")
    id("com.google.devtools.ksp") version "1.9.22-1.0.17"
}

kotlin {
    androidTarget()
    iosArm64()
    iosSimulatorArm64()
    iosX64()

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("com.tencent.kuikly-open:core:$kuiklyVersion")
                implementation("com.tencent.kuikly-open:compose:$kuiklyVersion")
            }
        }
    }
}

dependencies {
    add("kspCommonMainMetadata", "com.tencent.kuikly-open:core-ksp:$kuiklyVersion")
}

// Kuikly 2.5.0+ 需要添加 maven 源
repositories {
    maven("https://mirrors.tencent.com/nexus/repository/maven-tencent/")
}

4.3 各平台接入

Android(androidApp/build.gradle.kts)

kotlin

代码语言:javascript
复制
dependencies {
    implementation("com.tencent.kuikly-open:core-render-android:$kuiklyVersion")
}

iOS(iosApp/Podfile)

ruby

代码语言:javascript
复制
source 'https://cdn.cocoapods.org/'
platform :ios, '14.1'

target 'iosApp' do
  inhibit_all_warnings!
  pod 'OpenKuiklyIOSRender', '$kuiklyVersion'
end

或使用 SPM:

plaintext

代码语言:javascript
复制
https://github.com/Tencent-TDS/KuiklyUI.git

HarmonyOS(ohosApp/hvigor/hvigor-config.json5)

json

代码语言:javascript
复制
{
  "dependencies": {
    "kuikly-ohos-compile-plugin": "latest"
  }
}

五、最佳实践:编写三端共享代码

5.1 使用 @Page 注解 + KSP 自动路由

kotlin

代码语言:javascript
复制
// commonMain:只需一个注解,KSP 编译时自动生成路由注册代码
@Page(name = "homePage")
class HomePage : ComposeContainer() {

    @Composable
    override fun Content() {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .background(Color.White),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center
        ) {
            Text(
                text = "Hello, 三端统一!",
                fontSize = 24.sp,
                color = Color.Black
            )
            Spacer(modifier = Modifier.height(16.dp))
            Button(onClick = { /* 跳转逻辑 */ }) {
                Text("进入详情页")
            }
        }
    }
}

KSP 自动生成(无需手写):

kotlin

代码语言:javascript
复制
// 编译时自动生成,开发者无需关心
class KuiklyCoreEntry {
    fun triggerRegisterPages() {
        router.registerPage("homePage", HomePage::class)
    }
}

5.2 平台差异化处理:expect/actual 机制

kotlin

代码语言:javascript
复制
// commonMain:声明跨平台抽象
expect fun getPlatformName(): String

// androidMain:Android 实现
actual fun getPlatformName(): String = "Android"

// iosMain:iOS 实现
actual fun getPlatformName(): String = "iOS"

// ohosArm64Main:鸿蒙实现
actual fun getPlatformName(): String = "HarmonyOS"

5.3 高性能列表(三端一致)

kotlin

代码语言:javascript
复制
@Page(name = "feedPage")
class FeedPage : ComposeContainer() {

    private val items = (1..100).map { "Item $it" }

    @Composable
    override fun Content() {
        // LazyColumn 三端均支持按需渲染,优化长列表性能
        LazyColumn(modifier = Modifier.fillMaxSize()) {
            items(
                count = items.size,
                key = { index -> index }
            ) { index ->
                FeedItem(text = items[index])
            }
        }
    }
}

@Composable
private fun FeedItem(text: String) {
    Box(
        modifier = Modifier
            .fillMaxWidth()
            .height(60.dp)
            .padding(horizontal = 16.dp, vertical = 8.dp)
    ) {
        Text(text = text, fontSize = 16.sp)
    }
}

5.4 调用原生能力(Bridge 机制)

kotlin

代码语言:javascript
复制
// commonMain:通过 Bridge 调用各平台原生能力
class NetworkModule : Module() {

    fun fetchData(url: String, callback: (String) -> Unit) {
        // Bridge 自动将调用转发到各平台原生网络实现
        nativeBridge.call(
            method = "network.get",
            params = mapOf("url" to url)
        ) { result ->
            callback(result.toString())
        }
    }
}

六、三端开发最佳实践清单

6.1 代码组织原则

原则

说明

共享优先

业务逻辑、UI 布局、数据模型全部放 commonMain

平台隔离

仅平台特有 API(相机、传感器等)放对应平台目录

接口驱动

平台差异通过 expect/actual 抽象,不在业务层感知

模块化

按功能拆分模块,通过 KSP subModules 配置多模块路由

6.2 性能优化最佳实践

场景

推荐做法

长列表

使用 LazyColumn / LazyRow,配置 key 参数避免重复渲染

首屏优化

iOS 开启 TurboDisplay 增量渲染,缓存渲染指令树

布局计算

启用 Shadow 布局分离,将测量计算移至 Worker 线程

图片缓存

使用 MemoryCacheModule 管理图片缓存,页面退出时清理

内存管理

页面退出时调用 onDestroy() 清理资源,避免循环引用

动画

使用 Vsync 帧同步机制,保障三端动画流畅度一致

6.3 版本管理最佳实践

kotlin

代码语言:javascript
复制
// buildSrc/src/main/java/KuiklyVersions.kt
object KuiklyVersions {
    const val KUIKLY = "2.x.x"  // 三端版本号必须保持一致!
}

⚠️ 重要:Android(Gradle)、iOS(Podfile)、鸿蒙(oh-package.json5)三端的 Kuikly 版本号必须保持一致,否则会出现 API 不兼容问题。

6.4 调试技巧

平台

调试方式

Android

Android Studio 原生调试工具 + Logcat

iOS

Xcode Instruments + KuiklyRenderViewControllerBaseDelegator 性能监控

HarmonyOS

DevEco Studio 调试工具

通用

println() 跨平台日志输出

常见问题排查

plaintext

代码语言:javascript
复制
Page not registered     → 检查 @Page 注解是否正确,KSP 是否执行
KSP not executed        → 确认 KSP 插件已启用,执行 Build → Clean Project
ClassNotFoundException  → 检查依赖配置,三端版本号是否一致
iOS 线程崩溃            → 所有 Kuikly UI 操作必须在主线程调用

七、与其他方案对比

方案

Android

iOS

鸿蒙

性能

学习成本

Kuikly(推荐)

✅ 原生

⭐⭐⭐⭐⭐

低(Kotlin)

Flutter

⚠️ 社区

⭐⭐⭐⭐

中(Dart)

React Native

⭐⭐⭐⭐

中(JS/TS)

各端独立开发

⭐⭐⭐⭐⭐

高(三套技术栈)


八、总结

如果你的目标是同时覆盖 Android、iOS 和鸿蒙三端,Kuikly 是目前最完整、最成熟的开源解决方案,核心优势总结如下:

三端原生渲染:Android/iOS/鸿蒙均使用平台原生组件渲染,性能与纯原生持平 ✅ 90%+ 代码共享:业务逻辑、UI 布局一次编写,三端同步生效 ✅ 零学习成本:Kotlin/Android 开发者可直接上手,支持 Compose DSL 语法 ✅ KSP 编译时优化@Page 注解自动生成路由,零手写初始化代码 ✅ 企业级验证:腾讯 5 亿+ 日活产品中大规模验证,稳定可靠


参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • 一、问题背景:三端开发的真实痛点
  • 二、推荐方案:Kuikly(腾讯开源)
    • 2.1 框架简介
    • 2.2 三端支持情况
  • 三、架构设计:为什么能做到三端统一?
  • 四、快速上手:30 分钟搭建三端工程
    • 4.1 环境准备
    • 4.2 创建项目
    • 4.3 各平台接入
  • 五、最佳实践:编写三端共享代码
    • 5.1 使用 @Page 注解 + KSP 自动路由
    • 5.2 平台差异化处理:expect/actual 机制
    • 5.3 高性能列表(三端一致)
    • 5.4 调用原生能力(Bridge 机制)
  • 六、三端开发最佳实践清单
    • 6.1 代码组织原则
    • 6.2 性能优化最佳实践
    • 6.3 版本管理最佳实践
    • 6.4 调试技巧
  • 七、与其他方案对比
  • 八、总结
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档