gradle - 如何为 kotlin-multiplatform (kotlin 1.3.50) 添加对 build.gradle.kts 的依赖项?

标签 gradle dependency-management gradle-kotlin-dsl kotlin-multiplatform

我使用 kotlin-multiplatform 启动了一个新项目,以使用本教程创建一个可在 iOS 和 Android 上使用的库:

https://play.kotlinlang.org/hands-on/Targeting%20iOS%20and%20Android%20with%20Kotlin%20Multiplatform/01_Introduction

它似乎工作正常,但我想添加教程末尾提到的序列化库( https://github.com/Kotlin/kotlinx.serialization ),但我无法使其工作。

库中的设置指南不在 Kotlin DSL 中,因此我尝试了不同的方法来调整代码,但没有成功。这是我的项目 gradle :

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
        maven { url "https://kotlin.bintray.com/kotlinx" }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

现在是我的 build.gradle.kts

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    kotlin("multiplatform")
    kotlin("plugin.serialization")
}


kotlin {
    //select iOS target platform depending on the Xcode environment variables
    val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget =
        if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true)
            ::iosArm64
        else
            ::iosX64

    iOSTarget("ios") {
        binaries {
            framework {
                baseName = "SharedCode"
            }
        }
    }

    jvm("android")

    sourceSets["commonMain"].dependencies {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-common")
        implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.13.0")

    }

    sourceSets["androidMain"].dependencies {
        implementation("org.jetbrains.kotlin:kotlin-stdlib")
        implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.13.0")
    }

    sourceSets["iosMain"].dependencies {
        implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.13.0")
    }
}

val packForXcode by tasks.creating(Sync::class) {
    val targetDir = File(buildDir, "xcode-frameworks")

    /// selecting the right configuration for the iOS
    /// framework depending on the environment
    /// variables set by Xcode build
    val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
    val framework = kotlin.targets
        .getByName<KotlinNativeTarget>("ios")
        .binaries.getFramework(mode)
    inputs.property("mode", mode)
    dependsOn(framework.linkTask)

    from({ framework.outputDirectory })
    into(targetDir)

    /// generate a helpful ./gradlew wrapper with embedded Java path
    doLast {
        val gradlew = File(targetDir, "gradlew")
        gradlew.writeText("#!/bin/bash\n"
                + "export 'JAVA_HOME=${System.getProperty("java.home")}'\n"
                + "cd '${rootProject.rootDir}'\n"
                + "./gradlew \$@\n")
        gradlew.setExecutable(true)
    }
}

tasks.getByName("build").dependsOn(packForXcode)

我没有错误,但我无法在代码中使用该库。 有人可以解释如何将此依赖项或任何依赖项与此设置集成吗?我做错了什么?

注意:我使用的是 Android Studio 3.5.1、Gradle 5.4.1、Kotlin 1.3.50。

最佳答案

好的,所以我发现了问题..只是库的版本..0.13.0而不是0.14.0。当您同步错误的库版本时,不会引发错误。我希望这篇文章能对某人有所帮助。

关于gradle - 如何为 kotlin-multiplatform (kotlin 1.3.50) 添加对 build.gradle.kts 的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58713173/

相关文章:

groovy - 将现有的 groovy build.gradle 文件转换为基于 kotlin 的 build.gradle.kts

android - 为什么其中一些来自同一个库的导入会作为未解析的引用返回?

kotlin - 使用 Kotlin 多模块 spring 项目创建 docker 镜像

安卓工作室 : Link of external JAR in a multi modules project

module - Gradle 模块执行顺序

java - IntelliJ中使用的是哪个maven右键->maven->reimport

python - Buildout 是否可以覆盖包含其自身依赖项的应用程序的依赖项?

java - 源兼容性 目标兼容性 使用原因

android - 排除特定的构建变体

java - 添加android项目依赖失败