Kotlin MPP-无法解析Stetho拦截器

时间:2019-12-23 05:23:48

标签: kotlin gradle-kotlin-dsl

我正在首次尝试使用Kotlin DSL gradle文件构建Kotlin MPP。 这个问题很简单,但我一直在尝试解决所有可能的问题:Android共享代码无法解析Stetho拦截器

Screenshot of the issue

我的build.gradle.kts

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

plugins {
    kotlin("multiplatform")
    id("kotlinx-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-coroutines-core-common:1.3.3")
        implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.14.0")

        // HTTP
        implementation("io.ktor:ktor-client-core:1.3.0-rc")
        implementation("io.ktor:ktor-client-json:1.3.0-rc")
        implementation("io.ktor:ktor-client-serialization:1.3.0-rc")
    }

    sourceSets["androidMain"].dependencies {
        implementation("org.jetbrains.kotlin:kotlin-stdlib")
        implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.3")
        implementation("io.ktor:ktor-client-android:1.3.0-rc")
        implementation("io.ktor:ktor-client-json-jvm:1.3.0-rc")
        implementation("io.ktor:ktor-client-serialization-jvm:1.3.0-rc")
        implementation("io.ktor:ktor-client-okhttp:1.3.0-rc")
        implementation("com.squareup.okhttp3:logging-interceptor:4.0.1")
        implementation( "com.facebook.stetho:stetho-okhttp3:1.5.1")
    }

非常感谢您的帮助!

编辑:

所以我发现当我更换

jvm(“ android”)

android()

可以导入Steth-interceptor,但是Android Studio for iOS无法正确链接“ expected”和“ actual”关键字:

当我在iOS上悬停一个实际声明时,“实际属性...没有相应的预期声明”

当我同时使用

jvm(“ android”) android()

我收到gradle错误:

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

1 个答案:

答案 0 :(得分:0)

如果您已经在使用android()目标,则不需要jvm(“ android”)。如果您想要一个单独的jvm目标,则应将其命名为其他名称(例如jvm(“ something”))。

一旦您添加了android target和manifest + android定义,这些库就会解析。 Facebook库可能取决于android目标,这就是为什么它无法解析的原因。