常见问题
Kotlin 多平台
什么是 Kotlin 多平台?
Kotlin 多平台 (KMP)是 JetBrains 推出的开源跨平台开发技术。它允许您为不同平台创建应用,并高效复用代码,同时保留原生编程的优势。通过 Kotlin 多平台,您可以开发面向 Android、iOS、桌面端、网页端、服务端等平台的应用程序。
能否用 Kotlin 多平台共享用户界面?
可以。您可以通过 Compose Multiplatform (JetBrains 基于 Kotlin 和 Jetpack Compose 开发的声明式 UI 框架)共享用户界面。该框架支持为 iOS、Android、桌面端和网页端创建共享 UI 组件,帮助您在不同设备和平台上保持一致的界面体验。
了解更多,请参阅 Compose Multiplatform 部分。
Kotlin 多平台支持哪些平台?
Kotlin 多平台支持 Android、iOS、桌面端、网页端、服务端等平台。详情请查看支持的平台。
开发跨平台应用应使用哪种 IDE?
推荐使用 Android Studio IDE 进行 Kotlin 多平台项目开发。其他可选工具请参考推荐的 IDE 和代码编辑器。
如何新建 Kotlin 多平台项目?
创建 Kotlin 多平台应用教程提供了分步指南,您可选择仅共享逻辑或同时共享逻辑与 UI。
已有 Android 应用如何迁移到 Kotlin 多平台?
让 Android 应用支持 iOS教程详细说明了如何通过原生 UI 实现 iOS 适配。若需通过 Compose Multiplatform 共享 UI,请参考对应解答。
哪里可以获取完整示例?
查看实际案例列表。
有哪些实际使用 Kotlin 多平台的企业案例?
访问案例研究集了解已投产 KMP 的企业实践。
Kotlin 多平台支持哪些操作系统?
除 iOS 专用代码外,共享代码和平台代码可在 IDE 支持的任意操作系统上开发。详见推荐的 IDE。
如需编写 iOS 专用代码并在模拟器或真机运行,必须使用 macOS 设备。根据苹果要求,iOS 模拟器无法在 Windows 或 Linux 等其他系统运行。
如何在 Kotlin 多平台项目中编写并发代码?
仍可使用协程和 Flow 编写异步代码。从 Kotlin 调用挂起函数和 Flow 的文档(尤其是 Android)较为完善。 从 Swift 代码调用需额外处理,详见 KT-47610。
当前最佳实践是使用 KMP-NativeCoroutines 或 SKIE 等插件库,结合 Swift 的 async
/await
或 Combine、RxSwift 等方案。KMP-NativeCoroutines 更成熟稳定,支持多种并发模式;SKIE 配置更简便(如将 Kotlin Flow
直接映射为 Swift AsyncSequence
)。两者均支持协程取消。
具体用法参考在 iOS 和 Android 间共享更多逻辑。
什么是 Kotlin/Native?与 Kotlin 多平台有何关联?
Kotlin/Native 是将 Kotlin 代码编译为原生二进制文件的技术(无需虚拟机),包含基于 LLVM 的编译器后端和 Kotlin 标准库原生实现。
该技术主要面向嵌入式设备和 iOS 等无法/不宜使用虚拟机的平台,适合需要生成独立运行程序的场景。
例如:移动应用中,共享的 Kotlin 代码通过 Kotlin/JVM 编译为 Android 的 JVM 字节码,通过 Kotlin/Native 编译为 iOS 原生二进制,实现双平台无缝集成。

如何加快 Kotlin 多平台模块在原生平台(iOS/macOS/Linux)的编译速度?
Compose Multiplatform
什么是 Compose Multiplatform?
Compose Multiplatform 是 JetBrains 开发的现代化声明式响应式 UI 框架,能用少量 Kotlin 代码构建用户界面,并支持在 iOS、Android、桌面端(Windows/macOS/Linux)和网页端等平台运行同一套 UI。
它与 Android 的 Jetpack Compose 有何关系?
Compose Multiplatform 与 Google 开发的 Jetpack Compose 共享大部分 API。针对 Android 时,实际运行的就是 Jetpack Compose。其他平台的底层实现可能不同,但 API 保持一致。
详情参阅框架关联概述。
可以在哪些平台间共享 UI?
我们致力于支持主流平台(Android/iOS/桌面端/基于 Wasm 的网页端)的任意组合共享。目前 Compose Multiplatform 对 Android 和桌面端已达到稳定状态,详见支持的平台。
Compose Multiplatform 能否用于生产环境?
Android 和桌面端目标已稳定,可用于生产。iOS 目标处于 Beta 阶段(功能完整),投产时需注意变更和废弃警告。基于 WebAssembly 的网页端版本处于 Alpha 阶段(积极开发中),使用时需谨慎预期迁移问题,其 UI 与其他平台保持一致。
如何新建 Compose Multiplatform 项目?
创建共享逻辑与 UI 的 Compose Multiplatform 应用教程提供了 Android/iOS/桌面端的创建指南,也可观看 Kotlin 开发者布道师 Sebastian Aigner 制作的视频教程。
开发 Compose Multiplatform 应用推荐使用哪种 IDE?
推荐 Android Studio IDE,详情见推荐的 IDE 和代码编辑器。
是否有演示应用可供体验?
查看我们的示例集。
Compose Multiplatform 是否提供现成组件?
完整支持 Material 3 组件库。
Material 组件的可定制化程度如何?
可通过主题系统调整颜色、字体和间距。如需独特设计,可创建自定义组件和布局。
能否在现有 Kotlin 多平台应用中共享 UI?
若当前使用原生 API 构建 UI(常见情况),可逐步将部分界面改用 Compose Multiplatform 重写,因其支持互操作性。通过特殊互操作视图包装 Compose 编写的通用 UI 即可替换原生界面。
现有使用 Jetpack Compose 的 Android 应用如何迁移到其他平台?
迁移包含 UI 和逻辑两部分,复杂度取决于应用本身和使用的 Android 专属库数量。大部分界面可直接迁移至 Compose Multiplatform,所有 Jetpack Compose 组件均受支持。但部分 API 仅限 Android 目标(如资源处理需迁移至Compose Multiplatform 资源库 ,导航库需改用社区方案 )。完整 Android 专属 API 列表见当前文档。
业务逻辑需迁移至 Kotlin 多平台 。共享模块中使用 Android 依赖的代码需重写:可改用多平台库(检查 KMP-awesome 列表),或通过通用接口分离平台特定实现。
能否在现有 iOS 应用中集成 Compose 界面?
支持。Compose Multiplatform 提供多种集成方案,详见 SwiftUI 集成和 UIKit 集成。
能否在 Compose 界面中嵌入 UIKit/SwiftUI 组件?
支持,同上参见集成文档。
移动操作系统更新导致系统组件样式/行为变化时会发生什么?
由于组件通过画布绘制,您的 UI 将保持不变。若嵌入原生 iOS 组件,其外观可能随更新改变。
未来计划
Kotlin 多平台的发展规划?
JetBrains 正大力投入优化多平台开发体验,重点改进核心技术、苹果生态集成、工具链和 Compose Multiplatform 框架。 查看路线图。
Compose Multiplatform 何时全面稳定?
Android 和桌面端已稳定,iOS 处于 Beta,网页端处于 Alpha。我们正推进 iOS 和网页端的稳定版发布,具体日期将另行公布。稳定性状态详见支持的平台。
Kotlin 和 Compose Multiplatform 对网页端的未来支持?
当前重点投入 WebAssembly(Wasm)方向,您可体验Kotlin/Wasm 后端和 Wasm 版 Compose Multiplatform。
Kotlin/JS 后端已稳定。由于资源限制,我们已将 Compose Multiplatform 的网页端重心从 JS Canvas 转向 Wasm。
另提供 Compose HTML(原 Compose Multiplatform for web),这是面向 Kotlin/JS 操作 DOM 的附加库,不用于跨平台 UI 共享。
是否会改进多平台开发工具?
是的,我们深刻认识到当前工具链的不足,正在多个领域积极改进。
会提供 Swift 互操作支持吗?
是的,我们正在研究多种方案来实现 Kotlin 代码到 Swift 的直接互操作导出。