【发布时间】:2022-12-22 22:49:43
【问题描述】:
使用带有 Kotlin Multiplatform Mobile 插件的 Android Studio,我创建了一个 KMM 项目,它提供对 Android 和 iOS 的支持。
但是,我也希望能够使用相同的代码库和 UI 来部署以创建桌面应用程序。那可能吗?如果是,怎么办?
【问题讨论】:
标签: mobile desktop kotlin-multiplatform
使用带有 Kotlin Multiplatform Mobile 插件的 Android Studio,我创建了一个 KMM 项目,它提供对 Android 和 iOS 的支持。
但是,我也希望能够使用相同的代码库和 UI 来部署以创建桌面应用程序。那可能吗?如果是,怎么办?
【问题讨论】:
标签: mobile desktop kotlin-multiplatform
是的,有可能。事实上,本教程详细介绍了如何执行此操作,尽管是以一种相当迂回的方式,我花了几天时间才完成:
https://www.kodeco.com/books/kotlin-multiplatform-by-tutorials/v1.0/chapters/1-introduction
因此,我冒昧地创建了一个简短的摘要,介绍如何为桌面/Android/iOS 应用程序创建基本项目设置:
在 Android Studio 中安装 Kotlin Multiplatform Mobile 和 Compose Multiplatform IDE Support 插件
新建Kotlin Multiplatform App项目(在Phone and Tablet下)
com.domain.project
在shared/build.gradle.kts中,在kotlin块中,在android()之后,添加:
jvm("desktop"){
compilations.all {
kotlinOptions.jvmTarget = "11"
}
}
在应用的顶层添加一个新的desktop文件夹
在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"
}
}
}
}
在顶层,在 settings.gradle.kts 最后添加 include(":desktop")
点击“立即同步”(或File > Sync project with gradle files)
desktop 文件夹现在应该被识别为一个模块,由文件夹图标右下角的小方块指示
在desktop模块中,创建文件夹链src/jvmMain/kotlin
在刚刚创建的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")
}
}
}
}
使用以下设置添加 Gradle 类型的运行配置:
创建文件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()
您现在应该能够运行桌面应用程序
之后,您可以创建共享的 Compose 视图,这些视图将在 Android 和桌面上运行。上述教程的第 5 章涵盖了:
【讨论】: