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

如何在Compose Multiplatform项目中引入Java代码

在Compose Multiplatform项目中引入Java代码的正确方式

一、Android目标中添加Java代码

Android原生支持Java与Kotlin混合开发,按以下步骤操作即可:

  1. 手动在项目目录创建src/androidMain/java文件夹,按Java包结构(对应你的indi.midreamsheep.app.tre命名空间)存放Java类。
  2. 若IDE未自动识别Java目录,在android块中补充配置:
android {
    // ... 保留原有配置
    sourceSets["main"].java.srcDirs("src/androidMain/java")
}
  1. 在Kotlin代码中直接导入Java类调用即可,例如:
import indi.midreamsheep.app.tre.YourJavaClass

二、Desktop(JVM)目标中添加Java代码

KMP的JVM目标默认只识别Kotlin源码,需手动配置Gradle识别Java目录:

  1. 创建src/desktopMain/java文件夹,按包结构存放Java类。
  2. 在kotlin块的sourceSets中,给desktopMain添加Java源码目录配置:
kotlin {
    // ... 保留原有配置
    sourceSets {
        val desktopMain by getting {
            java.srcDirs("src/desktopMain/java")
            dependencies {
                implementation(compose.desktop.currentOs)
            }
        }
        // ... 保留其他sourceSet配置
    }
}

三、解决setDir未解析问题

Copilot给出的setDir属于Groovy DSL写法,而你的项目使用Kotlin DSL,需替换为srcDirs(支持单个或多个路径集合)。

修改后的核心build.gradle.kts片段

整合上述配置的关键代码如下:

plugins {
    alias(libs.plugins.kotlinMultiplatform)
    alias(libs.plugins.androidApplication)
    alias(libs.plugins.jetbrainsCompose)
}

kotlin {
    androidTarget {
        compilations.all {
            kotlinOptions {
                jvmTarget = "1.8"
            }
        }
    }

    jvm("desktop")

    sourceSets {
        val desktopMain by getting {
            java.srcDirs("src/desktopMain/java")
            dependencies {
                implementation(compose.desktop.currentOs)
            }
        }
        androidMain.dependencies {
            implementation(libs.compose.ui.tooling.preview)
            implementation(libs.androidx.activity.compose)
        }
        commonMain.dependencies {
            implementation(compose.runtime)
            implementation(compose.foundation)
            implementation(compose.material)
            implementation(compose.ui)
            @OptIn(ExperimentalComposeLibrary::class)
            implementation(compose.components.resources)
        }
    }
}

android {
    namespace = "indi.midreamsheep.app.tre"
    compileSdk = libs.versions.android.compileSdk.get().toInt()

    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    sourceSets["main"].res.srcDirs("src/androidMain/res")
    sourceSets["main"].resources.srcDirs("src/commonMain/resources")
    sourceSets["main"].java.srcDirs("src/androidMain/java")

    // ... 保留原有defaultConfig、packaging等配置
}

// ... 保留原有compose.desktop配置

验证配置

点击IDE的「Sync Project with Gradle Files」按钮,Gradle会自动识别Java目录,此时可在对应目录编写Java代码,并在Kotlin代码中正常调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:20:29