什么是 Kotlin Multiplatform,为什么需要它?
\n\nKotlin 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
Kotlin Multiplatform 非常适合:移动应用(Android + iOS)、服务器应用(Ktor + KMP)、Web 应用(Kotlin/JS)、桌面应用(Compose Multiplatform)以及需要在任何地方运行的库。
\n\n安装与配置
\n\nKotlin Multiplatform 不是通过 pip 或 npm 安装的。它是一个构建工具,通过 Gradle 构建系统进行配置。以下是创建 KMP 项目的标准流程。
1. 安装 IntelliJ IDEA 或 Android Studio
\n建议使用 IntelliJ IDEA Ultimate(Community Edition 也可以,但有局限性)或安装了 Kotlin Multiplatform 插件的 Android Studio。
\n\n2. 创建项目
\n最简单的方法是使用 Kotlin Multiplatform Wizard(JetBrains 的在线工具):https://kmp.jetbrains.com/。选择你需要的平台(Android、iOS、Desktop、Web)并下载准备好的模板。
\n\n3. 项目结构(Gradle)
\n主要的配置文件是 build.gradle.kts(根模块和子模块)。关键插件:
// 根模块 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")\