Appearance
Kotlin Multiplatform
Kotlin Multiplatform(KMP)允许在 Android、iOS、JVM、JS 等多平台共享代码。
build.gradle.kts
kotlin
plugins {
kotlin("multiplatform") version "1.9.22"
id("com.android.library") version "8.2.1"
}
kotlin {
// JVM 目标
jvm {
testRuns["test"].executionTask.configure {
useJUnitPlatform()
}
}
// Android 目标
androidTarget {
compilations.all {
kotlinOptions { jvmTarget = "17" }
}
}
// iOS 目标
iosX64()
iosArm64()
iosSimulatorArm64()
// JS 目标
js(IR) {
browser { testTask { useKarma { useChromeHeadless() } } }
nodejs()
}
sourceSets {
// 所有平台共享代码
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
// JVM 特有代码
val jvmMain by getting {
dependencies {
implementation("io.ktor:ktor-client-cio:2.3.7")
}
}
// Android 特有代码
val androidMain by getting {
dependencies {
implementation("io.ktor:ktor-client-android:2.3.7")
}
}
// iOS 特有代码
val iosMain by creating {
dependsOn(commonMain)
dependencies {
implementation("io.ktor:ktor-client-darwin:2.3.7")
}
}
}
}共享业务逻辑
kotlin
// commonMain/kotlin/com/example/shared/ApiClient.kt
package com.example.shared
expect class Platform() {
val name: String
}
class ApiClient {
private val platform = Platform()
fun getPlatformInfo(): String = "Running on ${platform.name}"
}kotlin
// jvmMain/kotlin/com/example/shared/Platform.jvm.kt
actual class Platform {
actual val name: String = "JVM ${System.getProperty("java.version")}"
}下一步
- Android 项目构建 - Android 专项配置