You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Kotlin Multiplatform Mobile项目添加桌面端支持

可行,具体操作步骤如下

1. 为KMM项目添加桌面(JVM)目标

首先需要在项目的Gradle配置中添加桌面平台支持:

  • 打开项目根目录的settings.gradle.kts,确保包含桌面模块引用(若无则添加include(":desktop"))
  • 进入shared模块的build.gradle.kts,在kotlin块的targets中添加JVM目标:
kotlin {
    android()
    iosX64()
    iosArm64()
    iosSimulatorArm64()
    // 添加桌面JVM目标
    jvm("desktop") {
        compilations.all {
            kotlinOptions.jvmTarget = "17" // 根据需求调整JDK版本
        }
    }

    sourceSets {
        val commonMain by getting
        val androidMain by getting
        val iosX64Main by getting
        val iosArm64Main by getting
        val iosSimulatorArm64Main by getting
        // 配置桌面源集,依赖commonMain
        val desktopMain by creating {
            dependsOn(commonMain)
            dependencies {
                // 添加桌面所需依赖,比如Compose Desktop
                implementation(compose.desktop.currentOs)
            }
        }
    }
}
  • 若使用Compose,需在项目根build.gradle.kts的plugins块中添加Compose插件:
plugins {
    // 其他插件...
    id("org.jetbrains.compose") version "1.5.11" apply false
}

2. 复用现有共享代码

KMM的commonMain模块中已有的业务逻辑、数据层(如Repository、ViewModel、网络/数据库操作)可直接复用:

  • 检查现有代码中的expect声明,为桌面平台补充对应的actual实现(比如文件存储、系统权限等平台特定逻辑)
  • 确保所有平台相关代码通过expect/actual机制隔离,避免在common模块中出现平台专属API

3. 复用UI组件(基于Compose)

若项目已使用Jetpack Compose开发Android UI,可直接将UI组件迁移到commonMain中实现跨平台复用:

  • 在commonMain中编写共享Compose组件,示例:
@Composable
fun SharedAppContent(viewModel: MainViewModel) {
    MaterialTheme {
        Scaffold(
            topBar = { TopAppBar(title = { Text("跨平台应用") }) }
        ) { padding ->
            Column(modifier = Modifier.padding(padding)) {
                Text(text = viewModel.greeting.value)
                Button(onClick = { viewModel.updateGreeting() }) {
                    Text("更新问候语")
                }
            }
        }
    }
}
  • 针对平台特定的UI调整(如Android状态栏适配、桌面窗口尺寸设置),通过expect/actual定义平台专属的Compose扩展或组件
  • 若之前未使用Compose,建议迁移到Compose以最大化UI复用;若坚持原生UI,桌面端需单独开发,但业务逻辑仍可复用

4. 创建桌面应用入口

在desktop模块中创建主函数,初始化桌面窗口并加载共享UI:

fun main() = application {
    Window(
        title = "KMM桌面应用",
        size = IntSize(800, 600)
    ) {
        val viewModel = MainViewModel()
        SharedAppContent(viewModel = viewModel)
    }
}

5. 运行与调试

  • 在Android Studio的运行配置中,选择desktop模块的Run配置,直接启动桌面应用
  • 调试时可像调试JVM应用一样设置断点,查看共享代码的执行流程

内容的提问来源于stack exchange,提问作者Kira Resari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:10:25