首页 > 解决方案 > 如何在 Kotlin Multiplatform 中将默认的 `jvm` sourceSet 添加到 `android` 目标?

问题描述

使用 Kotlin/Multiplatform 1.3.11我有以下内容build.gradle

    fromPreset(presets.jvm, 'jvm')
    fromPreset(presets.android, 'jvm') // reusing jvm sources for android platform impl

所以基本上我想重用jvm目标的所有代码android

使用刚刚发布的 Kotlin/Multiplatform 1.3.20现在我收到一个错误:

目标“jvm”已经存在,但不是使用“android”预设创建的。要对其进行配置,请在中按名称访问它kotlin.targets或使用预设功能“jvm”打开文件

我试图迁移到新语法:

   jvm()
   android() {
   sourceSets.add(kotlin.targets.jvm.compilations.main.defaultSourceSet)
   }

但它不会为 Android 目标重用 jvm defaultSourceSet:

预期的类“URL”在模块中没有实际声明

所以它实际上并没有使用默认的 jvm 源集,也没有抛出 Groovy 语法错误。

怎么了?

标签: kotlinkotlin-multiplatform

解决方案


实际上,最好的解决方案是有一些通用的源集,并且每个平台都有一个:

    commonJvmMain {
        dependencies {
            implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
        }
    }
    jvmMain {
        dependsOn commonJvmMain
    }
    androidMain {
        dependsOn commonJvmMain
    }

将共享代码放在commonJvmMainsourceset 目录中。

https://github.com/JetBrains/kotlin-native/issues/2577


推荐阅读