Kotlin MPP - 无法解析 Stetho 拦截器
Kotlin MPP - Cannot resolve Stetho Interceptor
我第一次尝试使用 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()
Stetho-interceptor 可以导入,但是 "expected" 和 "actual" 关键字没有被 Android studio 为 iOS 正确链接:
"Actual property ... has no corresponding expected declaration" 当我悬停 iOS
的实际声明时
当我同时使用两者时
jvm("android")
android()
我收到 gradle 错误:
"The target 'android' already exists, but it was not created with the 'jvm' preset. To configure it, access it by name in kotlin.targets
or use the preset function 'android'."
如果您已经在使用 android() 目标,则不需要 jvm("android")。如果您想要一个单独的 jvm 目标,那么您应该将其命名为不同的名称(例如 jvm("something") )。
添加 android 目标和清单 + android 定义后,库应该解析。 facebook 库可能依赖于 android 目标,这就是它无法解析的原因。
我第一次尝试使用 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()
Stetho-interceptor 可以导入,但是 "expected" 和 "actual" 关键字没有被 Android studio 为 iOS 正确链接:
"Actual property ... has no corresponding expected declaration" 当我悬停 iOS
的实际声明时当我同时使用两者时
jvm("android") android()
我收到 gradle 错误:
"The target 'android' already exists, but it was not created with the 'jvm' preset. To configure it, access it by name in kotlin.targets
or use the preset function 'android'."
如果您已经在使用 android() 目标,则不需要 jvm("android")。如果您想要一个单独的 jvm 目标,那么您应该将其命名为不同的名称(例如 jvm("something") )。
添加 android 目标和清单 + android 定义后,库应该解析。 facebook 库可能依赖于 android 目标,这就是它无法解析的原因。