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

KMM模块生成的AAR缺失androidMain中Java类的问题咨询

KMM打包AAR缺失Java类问题解答

1. 这是KMM的限制还是特性?

既不是限制也不是特性,属于默认打包配置的疏漏。KMM本身完全支持在androidMain源集中混合编写Kotlin和Java代码,只是默认配置下,Android目标的打包流程没把Java类的编译产物纳入范围,才导致它们没出现在AAR的classes.jar里。

2. 如何让androidMain中的Java类被包含进AAR?

你需要在KMM模块的构建配置里,显式指定Java源码路径,并确保Java编译后的字节码被合并到最终的classes.jar中,具体配置分两种DSL类型:

Kotlin DSL(build.gradle.kts)

android {
    sourceSets {
        named("androidMain") {
            // 显式声明Java源码目录
            java.srcDir("src/androidMain/java")
        }
    }

    // 把Java编译产物加入Jar打包任务
    tasks.withType<Jar> {
        from(tasks.named("compileDebugJavaWithJavac").map { it.destinationDir })
        from(tasks.named("compileReleaseJavaWithJavac").map { it.destinationDir })
    }
}

Groovy DSL(build.gradle)

android {
    sourceSets {
        androidMain {
            java.srcDir 'src/androidMain/java'
        }
    }

    tasks.withType(Jar) {
        from tasks.compileDebugJavaWithJavac.destinationDir
        from tasks.compileReleaseJavaWithJavac.destinationDir
    }
}

配置完成后重新构建AAR,解压查看classes.jar就能看到Java类的字节码文件了。另外要确保你的KMM模块已经应用了com.android.library插件,否则Android相关的编译和打包任务不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:06:00