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



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

然而,我也希望能够使用相同的代码库和UI来部署创建桌面应用程序。这是可能的吗?如果是,怎么做?

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

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

因此,我冒昧地做了一个简短的总结,告诉你如何为桌面/Android/iOS应用创建一个基本的项目设置:

  1. 在Android Studio中安装Kotlin Multiplatform MobileCompose Multiplatform IDE Support插件

  2. 新建Kotlin Multiplatform App项目(Phone and Tablet下)

    • 对于以下几点,我将假设项目名称为"我的项目"。包名为com.domain.project
  3. shared/build.gradle.kts中,在kotlin块中,在android()之后,添加:

    • jvm("desktop"){
      compilations.all {
      kotlinOptions.jvmTarget = "11"
      }
      }
      
  4. 在应用程序的顶层添加一个新的desktop文件夹

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

    • 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"
      }
      }
      }
      }
      
  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")
      }
      }
      }
      }
      
  10. 添加Gradle类型的运行配置,设置如下:

    名字
    • :"Desktop">
    • :"run">
    • Gradle项目:"项目:desktop"
  11. 创建文件shared/src/desktopMain/kotiln/com.domain.project/Platform.kt,并填充如下:

    • package com.domain.project
      class DesktopPlatform : Platform {
      override val name: String = "Desktop"
      }
      actual fun getPlatform(): Platform = DesktopPlatform()
      
  12. 你现在应该可以运行桌面应用了

之后,你可以创建共享的撰写视图,将在android和桌面工作。上述教程的第5章介绍了:

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

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

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

最新更新