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
相关产品推荐
相关产品推荐

