Kotlin Multiplatform 用于 Kotlin:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Kotlin Multiplatform,为什么需要它?

\n\n

Kotlin Multiplatform (KMP) 并不是传统意义上的库,而是一种来自 JetBrains 的技术(SDK 和工具集),它允许你用 Kotlin 语言编写通用代码,并将其编译到多个平台:JVM(Android、服务器)、JavaScript(Web 浏览器、Node.js)、Native(iOS、macOS、Windows、Linux、watchOS、tvOS)。

\n\n

为什么需要它? 在现代开发中,经常需要为不同平台创建应用程序。传统上,这意味着要用不同的语言编写代码(iOS 用 Swift,Android 用 Java/Kotlin,Web 用 JavaScript)。Kotlin Multiplatform 解决了这个问题,它允许你将业务逻辑(网络请求、数据库操作、数据验证、序列化)提取到一个通用模块中,该模块在所有平台上使用。平台相关代码(UI、摄像头操作、传感器)保持原生,但其数量显著减少。

\n\n

关键优势:

\n
    \n
  • 缩短开发时间: 一次编写逻辑,随处使用。
  • \n
  • 统一的代码库: 更少的错误,更易于维护和重构。
  • \n
  • 原生性能: 与 React Native 或 Flutter 不同,KMP 编译为原生代码,而不是通过中间层运行。
  • \n
  • 灵活性: 你可以从小处着手——只提取一个库(例如,用于网络请求),然后逐步扩展通用代码。
  • \n
  • 使用现有代码: 可以通过 expect/actual 机制连接原生库。
  • \n
\n\n

Kotlin Multiplatform 非常适合:移动应用(Android + iOS)、服务器应用(Ktor + KMP)、Web 应用(Kotlin/JS)、桌面应用(Compose Multiplatform)以及需要在任何地方运行的库。

\n\n

安装与配置

\n\n

Kotlin Multiplatform 不是通过 pip 或 npm 安装的。它是一个构建工具,通过 Gradle 构建系统进行配置。以下是创建 KMP 项目的标准流程。

\n\n

1. 安装 IntelliJ IDEA 或 Android Studio

\n

建议使用 IntelliJ IDEA Ultimate(Community Edition 也可以,但有局限性)或安装了 Kotlin Multiplatform 插件的 Android Studio。

\n\n

2. 创建项目

\n

最简单的方法是使用 Kotlin Multiplatform Wizard(JetBrains 的在线工具):https://kmp.jetbrains.com/。选择你需要的平台(Android、iOS、Desktop、Web)并下载准备好的模板。

\n\n

3. 项目结构(Gradle)

\n

主要的配置文件是 build.gradle.kts(根模块和子模块)。关键插件:

\n
// 根模块 build.gradle.kts\nplugins {\n    kotlin("multiplatform") version "1.9.22" apply false\n    kotlin("plugin.serialization") version "1.9.22" apply false\n    id("com.android.application") version "8.2.0" apply false\n    id("org.jetbrains.compose") version "1.5.11" apply false\n}\n\n// shared 模块(通用代码)\nplugins {\n    kotlin("multiplatform")\n    kotlin("plugin.serialization")\n    id("com.android.library")\n}\n\nkotlin {\n    androidTarget {\n        compilations.all {\n            kotlinOptions {\n                jvmTarget = "1.8"\n            }\n        }\n    }\n\n    listOf(\n        iosX64(),\n        iosArm64(),\n        iosSimulatorArm64()\n    ).forEach {\n        it.binaries.framework {\n            baseName = "shared"\n            isStatic = true\n        }\n    }\n\n    sourceSets {\n        val commonMain by getting {\n            dependencies {\n                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")\n                implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")\                    

推荐