【发布时间】:2020-04-16 03:23:30
【问题描述】:
我正在尝试使用 Kotlin 多平台功能在 Android 和 JVM 目标之间共享 Java 代码(示例项目:https://github.com/dmitrykolesnikovich/accessJavaCode-issue)
简单地说,“:library1”和“:library2”都是针对 JVM 和 Android 的 Kotlin 多平台库。 “:library2”依赖于“:library1”。他们都使用 Kotlin 和 Java。 ":library2" 旨在成为 1) Android 应用程序和 2) 桌面 (JavaFX) 应用程序的依赖项。这就是为什么 1)AAR 工件和 2)JAR 工件都需要(?) - 所以我使用 1)Android 目标和 2)JVM 目标用于“:library1”和“:library2”。
问题是,当我在 ":library1" 中有 Java 代码时
public class JavaCode {} // JavaCode.java
“:library2”中的 Kotlin 代码依赖于“:library1”
class AccessJavaCode : JavaCode() // AccessJavaCode.kt
Android 目标可以识别 Java,但 JVM 目标不能:
> Task :library2:compileKotlinJvm FAILED
e: AccessJavaCode.kt: (3, 38): Unresolved reference: JavaCode
在 gradle config 中我定义了两个插件:kotlin-multiplatform 和 com.android.library:
apply plugin: "kotlin-multiplatform"
apply plugin: "com.android.library"
kotlin {
targets {
jvm()
android()
}
sourceSets {
jvmMain {
dependencies {
api kotlin("stdlib-common")
api kotlin("stdlib-jdk8")
}
}
androidMain {
dependsOn jvmMain
}
}
}
android {
compileSdkVersion 28
sourceSets {
main {
java.srcDirs += "src/jvmMain/kotlin" // Android target recognizes Java with this
manifest.srcFile "src/androidMain/AndroidManifest.xml"
}
}
}
我很确定我的 gradle 文件很简单。非常感谢你们的帮助。
【问题讨论】:
-
库 1 是纯 java 库 2 是 android 库?
-
":library1" 和 ":library2" 都是针对 JVM 和 Android 的 Kotlin 多平台库。他们都使用 Kotlin 和 Java。 ":library2" 旨在成为 1) Android 应用程序和 2) 桌面 (JavaFX) 应用程序的依赖项。这就是为什么 1)AAR 工件和 2)JAR 工件都需要(?) - 所以我使用 1)Android 目标和 2)JVM 目标用于 ":library1" 和 ":library2"。
-
好的,但我的问题是这些库是使用 android 还是 java fx 框架,还是它们只是使用标准的 java 代码操作。您是否打算让其中一个库创建 Fragment 或类似的东西?
-
@DmitryKolesnikovich 不确定这是否有帮助:discuss.kotlinlang.org/t/…
标签: kotlin kotlin-multiplatform