Kotlin multiplatform project.
common build.gradle:
plugins {
id 'kotlin-multiplatform' version '1.3.40'
id 'kotlinx-serialization' version '1.3.40'
}
apply plugin: 'kotlin-android-extensions'
def ktor_version = '1.2.2'
def kotlinx_coroutines_version = '1.3.0-M2'
def serialization_version = '0.11.0'
def kodein_version = '6.3.2'
repositories {
google()
jcenter()
mavenCentral()
maven { url "https://kotlin.bintray.com/kotlinx" }
maven { url "https://kotlin.bintray.com/kotlin/kotlinx" }
}
kotlin {
targets {
final def iOSTarget = System.getenv('SDK_NAME')?.startsWith("iphoneos") \
? presets.iosArm64 : presets.iosX64
fromPreset(presets.iosArm64, 'ios') {
binaries {
framework()
}
}
fromPreset(presets.jvm, 'android')
}
sourceSets {
commonMain.dependencies {
api 'org.jetbrains.kotlin:kotlin-stdlib-common'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$kotlinx_coroutines_version"
implementation "io.ktor:ktor-client-core:$ktor_version"
implementation "io.ktor:ktor-client-json:$ktor_version"
implementation "io.ktor:ktor-client-serialization:$ktor_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
implementation "org.kodein.di:kodein-di-core:$kodein_version"
implementation "org.kodein.di:kodein-di-erased:$kodein_version"
}
androidMain.dependencies {
api 'org.jetbrains.kotlin:kotlin-stdlib'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinx_coroutines_version"
implementation "io.ktor:ktor-client-android:$ktor_version"
implementation "io.ktor:ktor-client-json-jvm:$ktor_version"
implementation "io.ktor:ktor-client-okhttp:$ktor_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
}
iosMain.dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$kotlinx_coroutines_version"
implementation "io.ktor:ktor-client-ios:$ktor_version"
implementation "io.ktor:ktor-client-json-native:$ktor_version"
implementation "io.ktor:ktor-client-core-native:$ktor_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version"
}
}
}
dependencies {
}
// workaround for https://youtrack.jetbrains.com/issue/KT-27170
configurations {
compileClasspath
}
task packForXCode(type: Sync) {
def buildType = project.findProperty('kotlin.build.type') ?: 'DEBUG'
def target = project.findProperty('kotlin.target') ?: 'ios'
dependsOn kotlin.targets."$target".binaries.getFramework(buildType).linkTask
doLast {
def srcFile = kotlin.targets."$target".binaries.getFramework(buildType).outputFile
def targetDir = getProperty('configuration.build.dir')
copy {
from srcFile.parent
into targetDir
include 'app.framework/**'
include 'app.framework.dSYM'
}
}
}
tasks.build.dependsOn packForXCode
settings.gradle:
pluginManagement {
resolutionStrategy {
eachPlugin {
if (requested.id.id == "kotlin-multiplatform") {
useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${requested.version}")
}
if (requested.id.id == "kotlinx-serialization") {
useModule("org.jetbrains.kotlin:kotlin-serialization:${requested.version}")
}
}
}
}
include ':app'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}
include ':common'
project(":common").projectDir = new File("../common")
enableFeaturePreview('GRADLE_METADATA')
Gradle syncing is successful. But when i try to launch an android app, unresolved refereces appear.
Unresolved reference: KotlinxSerializer | 聽
-- | --
KotlinxSerializer is a ktor adapter class and Ktor artifact was renamed; use implementation "io.ktor:ktor-client-serialization-jvm:$ktor_version" for JVM, implementation "io.ktor:ktor-client-serialization:$ktor_version" for common, implementation "io.ktor:ktor-client-serialization-native:$ktor_version" for ios.
Most helpful comment
KotlinxSerializeris a ktor adapter class and Ktor artifact was renamed; useimplementation "io.ktor:ktor-client-serialization-jvm:$ktor_version"for JVM,implementation "io.ktor:ktor-client-serialization:$ktor_version"for common,implementation "io.ktor:ktor-client-serialization-native:$ktor_version"for ios.