了解多平台项目结构

探索多平台项目的主要部分:

多平台插件

创建多平台项目时, 项目向导会自动在 build.gradle(.kts) 文件中应用 kotlin-multiplatform 插件。

也可以手动应用它。

kotlin-multiplatform 插件适用于 Gradle 6.8.3 或更高版本。

了解多平台项目结构 - 图1

【Kotlin】

  1. plugins {
  2. kotlin("multiplatform") version "1.9.10"
  3. }

【Groovy】

  1. plugins {
  2. id 'org.jetbrains.kotlin.multiplatform' version '1.9.10'
  3. }

kotlin-multiplatform 插件可配置项目以创建可在多个平台上工作的应用程序或库, 并为在这些平台上构建做好准备。

build.gradle(.kts) 文件中,它在顶层创建 kotlin 扩展, 其中包括目标源代码集与依赖项的配置。

目标

一个多平台项目针对以不同目标表示的多个平台。 目标是构建的一部分,负责为特定平台(例如 macOS、iOS或Android)构建、测试与打包应用程序。 请参阅支持的平台列表。

创建多平台项目时,会将目标添加到 build.gradle(.kts) 文件中的 kotlin 块中。

  1. kotlin {
  2. jvm()
  3. js(IR) {
  4. browser {}
  5. }
  6. }

了解如何手动设置目标

源代码集

该项目包括带有 Kotlin 源代码集的 src 目录, 这些源代码集是 Kotlin 代码文件的集合,以及源代码集的资源、依赖与语言设置。 可以在 Kotlin 编译项中使用一个或多个源代码集目标平台。

每个源代码集目录都包含 Kotlin 代码文件(kotlin 目录)与 resources。 项目向导会为公共代码以及所有已添加目标的 maintest 编译项创建默认源代码集。

源代码集

源代码集名称区分大小写。

了解多平台项目结构 - 图3

源代码集被添加到顶层 kotlin 块的 sourceSets 块中。 For example, this is the source sets structure you get when creating a multiplatform library with the IntelliJ IDEA project wizard:

【Kotlin】

  1. kotlin {
  2. sourceSets {
  3. val commonMain by getting
  4. val commonTest by getting {
  5. dependencies {
  6. implementation(kotlin("test"))
  7. }
  8. }
  9. val jvmMain by getting
  10. val jvmTest by getting
  11. val jsMain by getting
  12. val jsTest by getting
  13. val nativeMain by getting
  14. val nativeTest by getting
  15. }
  16. }

【Groovy】

  1. kotlin {
  2. sourceSets {
  3. commonMain {
  4. }
  5. commonTest {
  6. dependencies {
  7. implementation kotlin('test')
  8. }
  9. }
  10. jvmMain {
  11. }
  12. jvmTest {
  13. }
  14. jsMain {
  15. }
  16. jsTest {
  17. }
  18. nativeMain {
  19. }
  20. nativeTest {
  21. }
  22. }
  23. }

源代码集形成一个层次结构,用于共享公共代码。 在多个目标之间共享的源代码集中,可以使用所有这些目标可用的平台特有的语言特性与依赖。

例如,所有 Kotlin 原生特性都可以在 desktopMain 源代码集中可用, 该源代码集的目标是 Linux(linuxX64)、Windows(mingwX64) 与 macOS(macosX64) 平台。

层次结构

了解如何构建源代码集的层次结构

编译项

每个目标可以具有一个或多个编译项,例如,用于生产与测试目的。

对于每个目标,默认编译项包括:

  • 针对 JVM、JS 与原生目标的 maintest编译项。
  • 针对 Android 目标的每个 Android 构建变体 的编译。

编译项

每个编译项都有默认的源代码集,其中包含该编译项特有的源代码与依赖。

了解如何配置编译项