前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kotlin跨平台Compose Multiplatform实战指南

Kotlin跨平台Compose Multiplatform实战指南

原创
作者头像
龙小雨
发布于 2025-05-12 16:10:39
发布于 2025-05-12 16:10:39
7760
举报

Kotlin Multiplatform(KMP)结合 Compose Multiplatform 正在成为跨平台开发的热门选择,它允许开发者用一套代码构建 AndroidiOS、桌面(Windows/macOS/Linux)和 Web 应用。以下是一个实战指南,涵盖核心概念和代码示例。


1. 环境搭建

  1. 工具要求
    • Android StudioIntelliJ IDEA(安装 Kotlin Multiplatform 插件)
    • Xcode(用于 iOS 编译)
    • JDK 11+
    • 配置 gradle.properties:kotlin.native.cacheKind=none # 避免 iOS 编译缓存问题
  2. 新建项目: 使用 Kotlin Multiplatform Wizard 快速生成跨平台项目模板,勾选 Compose Multiplatform 支持。

2. 项目结构

典型的多平台项目结构:

代码语言:kotlin
AI代码解释
复制
shared/
  src/
    commonMain/      # 公共代码(Compose UI、业务逻辑)
    androidMain/     # Android 平台特定代码
    iosMain/         # iOS 平台特定代码
    desktopMain/     # 桌面端代码
androidApp/          # Android 应用模块
iosApp/              # iOS Xcode 项目
desktopApp/          # 桌面端启动模块

3. 编写共享 Compose UI

shared/src/commonMain/kotlin 中创建跨平台组件:

代码语言:kotlin
AI代码解释
复制
// 共享的 Compose 组件
@Composable
fun Greeting(name: String) {
    Text(
        text = "Hello, $name!",
        modifier = Modifier.padding(16.dp),
        color = Color.Blue
    )
}

// 平台无关的 ViewModel
class SharedViewModel {
    private val _count = mutableStateOf(0)
    val count: State<Int> = _count

    fun increment() {
        _count.value++
    }
}

4. 平台适配

Android 端 (androidApp 模块)

直接使用 Compose:

代码语言:kotlin
AI代码解释
复制
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AppTheme {  // 自定义主题
                Greeting("Android")
            }
        }
    }
}
iOS 端 (iosApp 模块)

通过 UIViewController 嵌入 Compose:

代码语言:kotlin
AI代码解释
复制
// shared/src/iosMain/kotlin
fun MainViewController(): UIViewController =
    ComposeUIViewController { 
        Greeting("iOS") 
    }
桌面端 (desktopApp 模块)
代码语言:kotlin
AI代码解释
复制
fun main() = application {
    Window(onCloseRequest = ::exitApplication) {
        Greeting("Desktop")
    }
}

5. 处理平台差异

使用 expect/actual 机制实现平台特定逻辑:

代码语言:kotlin
AI代码解释
复制
// 公共代码声明 expect
expect fun getPlatformName(): String

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

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

在 Compose 中使用:

代码语言:kotlin
AI代码解释
复制
@Composable
fun PlatformSpecificGreeting() {
    Text("Running on ${getPlatformName()}")
}

6. 状态管理与导航

  • 状态管理:使用 mutableStateOf 或 ViewModel(通过 koinkodein 注入)。
  • 导航:使用 Voyager 或自定义导航逻辑:sealed class Screen { object Home : Screen() object Detail : Screen() }

@Composable

fun App() {

代码语言:kotlin
AI代码解释
复制
  var currentScreen by remember { mutableStateOf<Screen>(Screen.Home) }
代码语言:kotlin
AI代码解释
复制
  when (currentScreen) {
代码语言:kotlin
AI代码解释
复制
      is Screen.Home -> HomeScreen { currentScreen = Screen.Detail }
代码语言:kotlin
AI代码解释
复制
      is Screen.Detail -> DetailScreen { currentScreen = Screen.Home }
代码语言:kotlin
AI代码解释
复制
  }

}

代码语言:kotlin
复制

7. 资源管理

  • 共享资源:将图片、字体等放在 commonMain/resources,通过路径访问:Image(painterResource("images/logo.png"), "logo")
  • 平台资源:在 androidMain/resourcesiosMain/resources 放置平台特定资源。

8. 调试与发布

  • Android:直接通过 Android Studio 运行。
  • iOS
    • 生成 Xcode 项目:./gradlew podGen
    • 打开 iosApp/iosApp.xcworkspace 并运行。
  • 桌面端./gradlew run 或打包为原生应用:./gradlew packageDebian # Linux ./gradlew packageMsi # Windows ./gradlew packageDmg # macOS

9. 常见问题

  1. iOS 编译缓慢:禁用缓存(gradle.properties 中设置 kotlin.native.cacheKind=none)。
  2. 字体兼容性:iOS 需手动注册字体(通过 NSDataAsset)。
  3. 性能优化:避免在公共代码中使用过多平台差异分支。

10. 学习资源


通过 Compose Multiplatform,开发者可以显著减少重复代码,但需注意平衡代码共享与平台体验。建议从简单模块开始逐步迁移,同时利用 Kotlin 的强类型特性减少运行时错误。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
KMM跨平台开发入门,看这一篇就够了~
近些年,不管是最初的RN还是到现在的Flutter、Compose,他们都在做着一件事——跨平台。
黄林晴
2022/10/24
4.8K0
KMM跨平台开发入门,看这一篇就够了~
Hello World —— 使用 Kotlin 开发跨平台应用
在移动开发领域,Android 和 iOS 版本的应用程序通常会有很多共同点,背后的业务逻辑基本也是一致的。文件下载,读写数据库,从远程服务器获取数据,解析远程数据等等。所以我们为什么不只写一次业务逻辑代码,在不同的平台上共享呢?
路遥TM
2021/08/31
2.3K0
Compose也能开发iOS了,快来体验~
在之前,我们已经体验了Compose for Desktop 与 Compose for Web,目前Compose for iOS 已经有尚未开放的实验性API,乐观估计今年年底将会发布Compose for iOS。同时Kotlin也表示将在2023年发布KMM的稳定版本。
黄林晴
2023/05/31
1.5K0
Compose也能开发iOS了,快来体验~
谷歌社区说|聊聊Compose跨平台与KMM
大家好我是黄林晴,也是图书《Android Jetpack开发:原理解析与应用实战》的作者。上一次在社区分享还是在三年前的Android 11见面会上,本次为大家分享的主题是Compose Multiplatform和KMM。这里是本次分享的文字版。
黄林晴
2023/12/28
1.8K0
谷歌社区说|聊聊Compose跨平台与KMM
Android经典实战之Kotlin Multiplatform 中,如何处理不同平台的 API 调用
在 Kotlin Multiplatform 项目中,expect 和 actual 关键字被用于处理不同平台的 API 调用。以下是如何使用这些关键字的详细步骤和规则:
AntDream
2024/08/19
3120
Android经典实战之Kotlin Multiplatform 中,如何处理不同平台的 API 调用
Android经典实战之Kotlin Multiplatform跨平台开发
Kotlin Multiplatform(KMP)是JetBrains开发的一项开源技术,它允许开发者在多个平台上创建应用程序,同时高效地重用代码,保留原生编程的优势 。KMP支持在iOS、Android、macOS、Windows、Linux等多种操作系统上运行应用程序 。
AntDream
2024/08/19
6970
Android经典实战之Kotlin Multiplatform跨平台开发
Kotlin/Native KMM项目架构
Kotlin Multiplatform Mobile ( KMM ) 是一个 SDK,旨在简化跨平台移动应用程序的创建。在 KMM 的帮助下,您可以在 iOS 和 Android 应用程序之间共享通用代码,并仅在必要时编写特定于平台的代码。
libill
2021/10/17
3.4K0
Kotlin/Native KMM项目架构
Kotlin开发框架建议入门实践
开始之前推荐一篇实用的文章:uniapp 实现网络测速小功能 ,这篇网络测速文章详实且实用,提供了前端与后台的实现方法,值得一读,强烈推荐,讲解了网络测速的基本思路、测速界面设计与交互、代码实现:速度显示圆环等内容。
lyushine
2024/12/06
3660
再探Kotlin 跨平台——迁移Paging分页库至KMM
KMM的发展除了靠官方社区的支持外,一些大企业的开源落地也尤为重要。从这些开源中我们需要借鉴他的设计思想和实现方式。从而在落地遇到问题时,寻得更多的解决办法。
黄林晴
2022/11/21
1.3K0
再探Kotlin 跨平台——迁移Paging分页库至KMM
Compose 跨平台现状
Compose 能应用于跨平台,主要是基于 KMM 架构,KMM 的介绍可以查看官方文档《Get started with Kotlin Multiplatform Mobile[1]》,我们来看下 KMM 的简单架构:
codelang
2022/11/30
3.7K0
Compose 跨平台现状
跨平台开发框架 Compose Multiplatform 1.0 发布
JetBrains 工程师 Sebastian Aigner 在官方博客宣布,Compose Multiplatform(Kotlin 的声明式 UI 框架)已经发布了 1.0 版本,现在可以在生产环境中使用了。此版本主要解决质量和稳定性问题,同时修复关键问题和错误。
深度学习与Python
2021/12/09
1K0
KMM_Compose 获取当前容器或父视图的尺寸size
获取当前容器或父视图的尺寸可以使用 onGloballyPositioned,不过拿到的是像素点。
mikimo
2024/07/09
2650
JetBrains 发布了 Kotlin Multiplatform 的首个稳定版本
JetBrains 提供了 Kotlin Multiplatform 的首个稳定版本,支持跨 iOS、Android、桌面、Web 和服务器进行代码共享——尽管用于共享用户界面(UI)代码的部分,Compose Multiplatform,仅适用于 Android 和桌面。
深度学习与Python
2023/11/17
3410
JetBrains 发布了 Kotlin Multiplatform 的首个稳定版本
Compose跨平台第一弹:体验Compose for Desktop
Compose是Android官方提供的声明式UI开发框架,而Compose Multiplatform是由JetBrains 维护的,对于Android开发来说,个人认为学习Jetpack Compose是必须的,因为它会成为Android主流的开发模式,而compose-jb作为一个扩展能力,我们可以有选择的去尝试。今天我们先来了解一下使用compose-jb开发一个桌面端应用的流程。
黄林晴
2023/01/07
3.2K0
Compose跨平台第一弹:体验Compose for Desktop
Kotlin Multiplatform 实战记 | QCon
10 月 21 日我在上海举办的 QCon 全球软件开发大会上分享了 Kotlin Multiplatform 相关的内容,这里记录成文章,分享给你。
深度学习与Python
2021/11/19
1.8K0
开源 | 从 SQLlin 的更新看 Kotlin Multiplatform 技术更迭
最初,SQLlin 在 Kotlin/Native 平台上基于开源项目 SQLiter(见参考链接 1),目的是避免重复造轮子。虽然 SQLliter 是来自 Touchlab的优秀开源项目,但最近一年维护更新缓慢。在本文撰写时,SQLiter 于 2023 年 11 月发布了 1.3.0 和 1.3.1 两个版本(1.3.1升级到了 Kotlin 1.9.21,用于修复 1.9.20 的 Kotlin/Native 库版本号相关的问题)。但在这之前的版本,即 1.2.1 发布于 2022年 8 月,基于 Kotlin 1.6.20,一年以上没有更新。对于 2023 年的项目来说,1.6.20 过于老旧。老旧的版本导致了如下一些问题。
携程技术
2024/01/23
3230
开源 | 从 SQLlin 的更新看 Kotlin Multiplatform 技术更迭
开源公告|Kuikly 跨平台开发框架
Kuikly 是腾讯大前端领域 Oteam(公司级)推出的,面向客户端开发的全新跨端解决方案。Kuikly 基于 Kotlin Multiplatform(KMP) 技术,可以使用 Kotlin 原生开发语言创建 Android、iOS、鸿蒙、Web、小程序应用。
腾讯开源
2025/04/30
1.5K0
开源公告|Kuikly 跨平台开发框架
Android实战经验分享之用Kotlin中的Jetpack Compose构建声明式UI
Kotlin中的Jetpack Compose是用于构建Android用户界面的声明式UI工具包。它通过Kotlin语言来编写界面,旨在简化和加速UI开发过程。Jetpack Compose由谷歌推出,作为传统的视图系统(如XML布局和Android View组件)的替代或补充。下面我们来看看关于Jetpack Compose的核心概念、主题和样式、导航和预览功能:
AntDream
2024/08/12
6720
Android实战经验分享之用Kotlin中的Jetpack Compose构建声明式UI
JetBrains 又出了一款新神器,一套代码适应多端!
看到一款基于多端的 UI 调试工具,一套代码适应多端,真的是太棒了,下面分享给大家。
程序员小猿
2021/07/06
5160
前端开发者的 Kotlin 之旅:kotlin核心概念解析
Kotlin 的 Lambda 表达式语法更简洁,且天然支持高阶函数(以函数为参数或返回值的函数):
骑猪耍太极
2025/04/09
2560
前端开发者的 Kotlin 之旅:kotlin核心概念解析
推荐阅读
相关推荐
KMM跨平台开发入门,看这一篇就够了~
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档