第 1 课2026.07.17
Kotlin Multiplatform(KMP)让 Android、iOS 等平台共享业务代码,同时保留调用各平台原生 API 的能力。理解源码集,是后续学习网络请求、数据存储和 Compose Multiplatform 的基础。
第 1 课:KMP 源码集与代码共享
- 日期:2026-07-17
- 课程序号:01
- 知识点:
commonMain、平台源码集与共享边界
用途
Kotlin Multiplatform(KMP)让 Android、iOS 等平台共享业务代码,同时保留调用各平台原生 API 的能力。理解源码集,是后续学习网络请求、数据存储和 Compose Multiplatform 的基础。
核心概念
一个典型 KMP 模块会把代码分到不同源码集中:
commonMain:放各平台都能使用的 Kotlin 代码,例如数据模型、业务规则和状态管理。androidMain:放 Android 专属实现,例如调用 Android SDK。iosMain:放 iOS 专属实现,例如调用 Apple 平台 API。commonTest:放共享逻辑的测试。
最重要的原则是:优先把与平台无关的逻辑放进 `commonMain`,只有依赖原生 API 的部分才进入平台源码集。
示例代码
下面的问候语不依赖任何平台 API,因此应放在共享源码集:
文件:shared/src/commonMain/kotlin/Greeting.kt
kotlin
class Greeting {
fun message(name: String): String {
return "Hello, $name! Welcome to KMP."
}
}Android 或 iOS 都可以调用同一份逻辑:
kotlin
val text = Greeting().message("Kotlin")
println(text)输出:
text
Hello, Kotlin! Welcome to KMP.这里的 Greeting 不知道自己运行在 Android 还是 iOS 上,这正是共享代码的理想状态。
5 分钟练习
在 commonMain 中写一个 PriceCalculator:输入商品原价和折扣比例,返回折后价格。
要求:
- 原价为
100.0 - 折扣比例为
0.8 - 结果应为
80.0
先自己写,再查看参考答案。
参考答案
kotlin
class PriceCalculator {
fun calculate(originalPrice: Double, discountRate: Double): Double {
return originalPrice * discountRate
}
}
fun main() {
val calculator = PriceCalculator()
println(calculator.calculate(100.0, 0.8))
}这段代码只包含纯 Kotlin 计算,不依赖 Android 或 iOS API,所以适合放入 commonMain。
与上一课的联系
这是第一课,没有上一课。今天先建立 KMP 的代码分层心智模型;下一课可以继续认识 KMP 项目结构,以及 commonMain 如何被 Android、iOS 目标编译和使用。