如何向 Kotlin 多平台移动项目添加桌面支持

Kir*_*ari 3 mobile desktop kotlin-multiplatform

我使用 Android Studio 和 Kotlin Multiplatform Mobile 插件创建了一个 KMM 项目,它提供对 Android 和 iOS 的支持。

但是,我还希望能够使用相同的代码库和 UI 进行部署以创建桌面应用程序。那可能吗?如果是的话,怎么办?

Kir*_*ari 12

对的,这是可能的。事实上,本教程详细介绍了如何做到这一点,尽管是以一种相当迂回的方式,我花了几天时间才完成:

https://www.kodeco.com/books/kotlin-multiplatform-b​​y-tutorials/v1.0/chapters/1-introduction

因此,我冒昧地创建了一个简短的摘要,介绍如何为桌面/Android/iOS 应用程序创建基本项目设置:

  1. 在Android Studio中安装Kotlin Multiplatform Mobile和插件Compose Multiplatform IDE Support

  2. 创建一个新Kotlin Multiplatform App项目(在 下Phone and Tablet

    • 对于以下几点,我将假设项目名称为“My Project”,包名称为com.domain.project
  3. 在 中shared/build.gradle.ktskotlin块中,在 后面android()添加:

  4. desktop在应用程序的顶层添加一个新文件夹

  5. 将一个新文件添加build.gradle.kts到该desktop文件夹​​中,并填充以下内容:

    • import org.jetbrains.compose.compose
      import org.jetbrains.compose.desktop.application.dsl.TargetFormat
      
      plugins {
          kotlin("multiplatform")
          id("org.jetbrains.compose") version "1.2.2"
      }
      
      group = "com.domain.project"
      version = "1.0.0"
      
      kotlin {
          jvm {
              withJava()
              compilations.all {
                  kotlinOptions.jvmTarget = "11"
              }
          }
          sourceSets {
              val jvmMain by getting {
                  kotlin.srcDirs("src/jvmMain/kotlin")
                  dependencies {
                      implementation(compose.desktop.currentOs)
                      api(compose.runtime)
                      api(compose.foundation)
                      api(compose.material)
                      api(compose.ui)
                      api(compose.materialIconsExtended)
      
                      implementation(project(":shared"))
                  }
              }
          }
      }
      
      compose.desktop {
          application {
              mainClass = "MainKt"
              nativeDistributions {
                  targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
                  packageName = "MyProject"
                  macOS {
                      bundleID = "com.domain.project"
                  }
              }
          }
      }
      
      Run Code Online (Sandbox Code Playgroud)
  6. 在顶层,在最后settings.gradle.kts添加include(":desktop")

  7. 单击“立即同步”(或File > Sync project with gradle files

    • 同步后,该desktop文件夹现在应该被识别为一个模块,由文件夹图标右下角的小方块表示
  8. desktop模块中,创建文件夹链src/jvmMain/kotlin

  9. 在刚刚创建的kotlin文件夹中创建 Kotlin 文件Main,并填写如下:

    • import androidx.compose.foundation.layout.fillMaxSize
      import androidx.compose.material.Surface
      import androidx.compose.ui.Modifier
      import androidx.compose.ui.window.Window
      import androidx.compose.ui.window.application
      import androidx.compose.ui.window.rememberWindowState
      import androidx.compose.material.*
      
      fun main() {
          application {
              val windowState = rememberWindowState()
      
              Window(
                  onCloseRequest = ::exitApplication,
                  state = windowState,
                  title = "My Project"
              ) {
                  Surface(modifier = Modifier.fillMaxSize()) {
                      Text(text = "Welcome to my Project")
                  }
              }
          }
      }
      
      Run Code Online (Sandbox Code Playgroud)
  10. Gradle添加具有以下设置的运行配置类型:

    • 名称:《桌面》
    • 跑跑
    • Gradle 项目: “项目:桌面”
  11. 创建文件shared/src/desktopMain/kotiln/com.domain.project/Platform.kt,并用以下内容填充它:

  12. 您现在应该能够运行桌面应用程序

之后,您可以创建可在 Android 和桌面上运行的共享 Compose 视图。上述教程的第 5 章涵盖:

https://www.kodeco.com/books/kotlin-multiplatform-b​​y-tutorials/v1.0/chapters/5-developing-ui-compose-multiplatform

此外,这是我使用上述步骤创建的项目的基本版本:

https://github.com/KiraResari/ceal-chronicler/releases/tag/basic-android-and-desktop-app