将 Kotlin Multiplatform 添加到现有项目

要在 Android 项目中创建 Kotlin Multiplatform (KMP) 模块,请使用 Kotlin Multiplatform 共享模块模板,该模板适用于 Android Studio Meerkat 和 Android Gradle 插件 8.8.0 版及更高版本。

该模块模板可自动创建一个新模块,其中包含针对 Android 和 iOS 平台的最低配置。

设置共享 KMP 模块

要创建共享 KMP 模块,请按以下步骤操作

  1. 选择 File > New > New Module
  2. Templates面板中选择 Kotlin Multiplatform Shared Module 模板
Creating a new KMP Module
图 1. 创建新的 KMP 模块

模板中的字段如下

  • 模块名称 – 定义 Gradle 模块名称以及 iOS 框架名称(可稍后更改)
  • 软件包名称 – 定义此模块中文件的软件包名称
    1. 点击Finish,并允许 Gradle 与项目同步。您可能还会收到提示,要求将新创建的模块文件添加到源代码管理中。

完成后,Android Studio 项目视图会显示新的共享模块以及每个平台的源集。

Project view showing new shared modules
图 2. 显示新共享模块的项目视图

模块向导不会将新创建的模块作为依赖项添加到任何现有模块。下一步,您需要将共享模块链接到现有 Gradle 模块之一,类似于其他 Android 依赖项。

dependencies {
    ...
    implementation(project(":shared"))
}

启用后,您可以像往常一样访问代码。在 Android 应用中,您可以访问 androidMain 或 commonMain 中提供的代码。

如需详细了解 Kotlin Multiplatform 项目结构,请参阅Kotlin Multiplatform 项目结构基础知识

将共享模块设置到 iOS 应用

Swift 无法直接使用 Kotlin 模块,需要生成编译后的二进制框架。

Android Studio 中的新模块模板会将共享模块配置为为每个 iOS 架构生成一个框架。您可以在共享模块的 build.gradle.kts 文件中找到以下代码

val xcfName = "sharedKit"

iosX64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosSimulatorArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

如需详细了解如何定义其他架构类型,请参阅分层项目结构

要从 iOS 项目访问共享代码,请在编译 Swift 源代码之前添加一个脚本阶段以生成 Kotlin 框架

  1. 右键点击 Android Studio 中的文件,然后选择 Open InOpen in Associated Application。这将在 Xcode 中打开 iOS 应用。
Open in Associated Application
图 3. 在关联应用中打开
  1. 通过双击项目导航器中的项目名称打开项目设置
Xcode project settings dialog
图 4. Xcode 项目设置对话框
  1. 将默认的 Run Script 名称更改为 Compile Kotlin Framework,以便更好地识别此阶段的作用。双击 Run Script 标题进行编辑。
  2. 展开构建阶段,并在 Shell 文本字段中输入以下脚本代码
Adding a new run script build phase
图 5. 运行脚本构建阶段
  1. Run Script 阶段拖到 Compile Sources 阶段之前。

    Run script build phase before compile sources
    图 6. 运行脚本构建阶段在编译源文件之前

  2. 通过点击 ⌘B 或导航到 Product 菜单并选择 Build,在 Xcode 中构建项目。

构建成功后,您将看到以下图标。

Build successful shown in Xcode
图 7. 构建成功

在 iOS 应用中访问共享代码

要验证 iOS 应用是否可以成功访问共享模块中的代码,请执行以下操作

  1. 在 iOS 项目中,打开位于 Sources/View/ContentView.swiftContentView.swift 文件
  2. 在文件顶部添加 import sharedKit
  3. 修改 Text 视图以在显示的字符串中包含 Platform_iosKt.platform() 信息,如下所示

此更新会检查应用是否可以从共享模块调用 platform() 函数,该函数在 iOS 平台上运行时应返回“iOS”。

Xcode simulator running the iOS app
图 8. 运行 iOS 应用的 Xcode 模拟器

其他资源