使用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应用创建一个基本的项目设置:
在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
类型的运行配置,设置如下:- :"Desktop">
- :"run">
- Gradle项目:"项目:desktop"
创建文件
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()
你现在应该可以运行桌面应用了
之后,你可以创建共享的撰写视图,将在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