What you can learn
- Kotlin语言基础和进阶特性
- 声明式UI框架 Compose
- 使用Kotlin Multiplatform实现Android/iOS共享代码
Kotlin 发展史
-
2016
发布Kotlin 1.0(API稳定) -
2017
在Google I/O 2017,Google宣布: “Kotlin is now an officially supported language for Android.”
-
2019
在Google I/O 2019,Google再次宣布: “Android development will become increasingly Kotlin-first.”
-
2020–2023
Kotlin Multiplatform (KMP)快速发展,支持Android/iOS共享代码 -
2024
Kotlin 2.0.0版本, Kotlin K2编译器发布了稳定版本。 -
2025
Compose Multiplatform发布1.8版本- iOS稳定版本。
Kotlin 简介
Kotlin最初是一门JVM语言,核心是生成JVM字节码,可以在Java虚拟机上运行。 它与Java具备完美的互操作性 (Interoperability),同时拥有更现代的语法和丰富的语言特性,深受Android开发者的喜爱。
- 空安全(Null Safety):在编译期防止空指针异常(NPE)。
- 扩展函数(Extension Functions):可以为现有类添加新功能而不修改源码。
- 数据类(Data Classes):自动生成toString()、equals()等方法。
- 智能类型转换(Smart Casts)/ 类型推导(Type Inference): 面向对象编程
- Lambda表达式和高阶函数:更方便进行函数式编程。
- 协程(Coroutines):简化异步编程。
详细可以看官方文档: https://kotlinlang.org/docs/basic-syntax.html
Kotlin Multiplatform (KMP) 的优点
性能上接近原生。
Kotlin代码会根据平台,编译对应平台的Binary。
例如在Android上,它编译的是JVM字节码, 在iOS上编译成原生机器码 (Native binary),生成一个 .framework。
能够利用完整的平台功能
KMP通过expect/actual机制,可以调用平台API。(如Android SDK、iOS UIKit)
Flutter / React Native虽然能跨平台,但由于它们使用独立的运行时(Dart VM 或 JavaScript Engine),和Android/iOS系统原生运行时是分开的。 因此,需要通过 桥接层 进行通信:
- Flutter通过Platform Channels
- React Native通过Bridge通信
这种方式在调用原生功能时, 有性能开销(序列化/反序列化,线程切换)。调试和维护复杂。
KMP不使用单独的虚拟机或运行时,而是直接编译成平台原生产物,调用原生API就是同一进程、同一语言层级的直接函数调用,没有桥接开销。
渐进式集成
KMP支持函数级别粒度的共享,让你可以非常灵活地渐进式集成跨平台能力。
共享逻辑的范围完全自由: 可以是一个函数, 一个工具类, 或者整个数据层,甚至UI+数据层都由Kotlin实现。

Compose Multiplatform统一UI
Compose Multiplatform(以下称CMP)是Jetbrains基于Google的Jetpack Compose做的拓展, 增加了iOS,Desktop,Web的target。
- 在android上,CMP使用的仍然是Google的实现,所以在Android上没有任何兼容性问题。
- 其他端使用的Skia作为底层绘制引擎,能保证UI描画统一。
更轻松的调用平台原生画面
在跨平台开发中,不可避免的需要调用平台的View,例如地图,广告,相机,视频播放器。
KMP提供了更直接的原生视图互操作性。 例如在iOS端,Kotlin可以直接将UiViewController嵌入到ComposeView体系。
Kotlin Multiplatform (KMP) 的缺点
社区支持较差
Flutter/React Native开发中,几乎可以找到所有原生对应的第三方库,即使完全不懂原生开发,也可以通过用第三方库实现功能。KMP社区刚刚起步,没有那么多开源支持。
开发者技能要求比较高
因为第三方支持比较少, 原生平台开发的技能和Kotlin开发的知识必不可少。
iOS上UI的渐进式集成对内存压力比较大
由于iOS端上使用的是Skia引擎绘制的,如果需要从原生iOS工程中逐步把UI迁移到Compose, 这种做法会初始化更多的Skia实例造成内存占用过高。
Kotlin Multiplatform 应用事例
- X(旧推特)用KMP重构
https://www.youtube.com/watch?v=z-u99yZFn5o
- Bilibili使用KMP共享数据层和UI