了解多平台项目结构

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

多平台插件

创建多平台项目时, 项目向导会自动在 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。 项目向导会为公共代码以及所有已添加目标的 main 与 test 编译项创建默认源代码集。

源代码集

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

了解多平台项目结构 - 图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 {

5. }
6. commonTest {
7. dependencies {
8. implementation kotlin('test')
9. }
10. }
11. jvmMain {

13. }
14. jvmTest {

16. }
17. jsMain {

19. }
20. jsTest {

22. }
23. nativeMain {

25. }
26. nativeTest {

28. }
29. }
30. }

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

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

层次结构

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

编译项

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

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

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

编译项

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

了解如何配置编译项。