我正在首次尝试使用Kotlin DSL gradle文件构建Kotlin MPP。 这个问题很简单,但我一直在尝试解决所有可能的问题:Android共享代码无法解析Stetho拦截器
我的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'。” >
答案 0 :(得分:0)
如果您已经在使用android()目标,则不需要jvm(“ android”)。如果您想要一个单独的jvm目标,则应将其命名为其他名称(例如jvm(“ something”))。
一旦您添加了android target和manifest + android定义,这些库就会解析。 Facebook库可能取决于android目标,这就是为什么它无法解析的原因。