渐进式编程课
KMP 目录
第 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 目标编译和使用。