Мне удалось обойти эту проблему, создав отдельный модуль библиотеки Android только с битами, специфичными для платформы (и, что важно, без использования kotlinx
), а затем импортировав их в основной модуль приложения. Это означает, что модулю основного приложения больше не нужно использовать kotlin-platform-android
, а вместо него можно просто указать kotlin-android
.
Итак, в итоге, в модуле, содержащем специфичные для платформы биты:
apply plugin: 'com.android.library'
apply plugin: 'kotlin-platform-android'
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
expectedBy project(':engine')
}
и в основном модуле:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
freeCompilerArgs = ["-Xmulti-platform"]
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation project(':engine-android')
}
Обратите внимание, что нам все еще нужно передать -Xmulti-platform
компилятору Kotlin, чтобы иметь возможность связываться с :engine-android
; но мы используем плагин vanilla kotlin-android
, который работает нормально с kotlin-android-extensions
.