Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • KMP 项目结构与基本配置

KMP 项目结构与基本配置

什么是 KMP 项目结构?

Kotlin 多平台(Kotlin Multiplatform, KMP)项目允许开发者在一个代码库中编写共享逻辑,同时针对不同平台(如 JVM、Android、iOS、JavaScript 等)生成原生代码。KMP 项目的核心思想是通过 commonMain 模块定义共享代码,再通过平台特定模块(如 jvmMain、iosMain)实现平台差异化的逻辑。

项目结构解析

一个典型的 KMP 项目目录结构如下:

my-kmp-project/
├── build.gradle.kts          # 项目级构建配置
├── settings.gradle.kts       # 模块配置
├── commonMain/              # 公共代码
│   ├── kotlin/              # Kotlin 共享代码
│   └── resources/           # 共享资源
├── androidMain/             # Android 平台代码
│   ├── kotlin/              # Android 专用代码
│   └── resources/           # Android 资源
├── iosMain/                 # iOS 平台代码
│   ├── kotlin/              # iOS 专用代码
│   └── resources/           # iOS 资源
└── jvmMain/                 # JVM 平台代码
    ├── kotlin/              # JVM 专用代码
    └── resources/           # JVM 资源

基本配置步骤

1. 创建 KMP 项目

在 settings.gradle.kts 中启用 KMP 插件并声明目标平台:

pluginManagement {
    repositories {
        gradlePluginPortal()
        mavenCentral()
    }
}

plugins {
    id("org.jetbrains.kotlin.multiplatform") version "1.9.0"
}

kotlin {
    jvm()          // JVM 目标
    android()      // Android 目标
    iosX64()      // iOS 模拟器 (x86_64)
    iosArm64()     // iOS 真机 (ARM64)
    js(IR) {      // JavaScript 目标
        browser()
    }
}

2. 配置共享模块

在 build.gradle.kts 中定义 commonMain 依赖:

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
            }
        }
    }
}

3. 配置平台特定模块

为不同平台添加依赖(以 Android 为例):

kotlin {
    sourceSets {
        val androidMain by getting {
            dependencies {
                implementation("androidx.core:core-ktx:1.10.1")
            }
        }
    }
}

4. 使用 expect/actual 机制

在 commonMain 中声明预期 API:

// commonMain/kotlin/Platform.kt
expect fun getPlatformName(): String

在平台模块中实现具体逻辑:

// androidMain/kotlin/Platform.kt
actual fun getPlatformName(): String = "Android"

// iosMain/kotlin/Platform.kt
actual fun getPlatformName(): String = "iOS"

常见配置选项

配置项说明
enablePreviewFeatures启用实验性功能(如 K2 编译器)
compilerOptions配置编译器选项(如语言版本、API 版本)
targetHierarchy自定义目标层次结构(Kotlin 1.9+)

调试与构建

  • 运行测试:使用 ./gradlew allTests 执行所有平台测试
  • 构建 iOS 框架:./gradlew linkDebugFrameworkIosArm64
  • 发布 Android 库:./gradlew publishToMavenLocal

注意事项

  1. 确保 Android SDK 和 Xcode 已正确安装
  2. 对于 iOS 目标,需要在 macOS 上开发
  3. 使用最新稳定版的 Kotlin 插件(1.9.0+ 推荐)

通过以上配置,你的 KMP 项目已经可以开始编写跨平台代码了!下一节我们将深入探讨 expect/actual 机制的具体应用。

Last Updated:: 5/21/25, 7:58 PM