编译器无法解析io.ktor.client.features.logging中的类

时间:2019-06-06 19:56:23

标签: android gradle logging kotlin ktor

我正在尝试为Android应用程序中的Ktor http请求添加日志记录。根据{{​​3}},我必须添加gradle依赖项

implementation "io.ktor:ktor-client-logging:$ktor_version"

并使用此代码段

val client = HttpClient() {
    install(Logging) {
        logger = Logger.DEFAULT
        level = LogLevel.HEADERS
    }
}

问题是编译器“忽略”软件包io.ktor.client.features.logging添加为依赖项。奇怪的是,JsonFeature(作为类似的依赖项添加)工作正常。

install(JsonFeature) { // perfectly works
...
}

install(Logging) { // unresolved reference
...
}

我已经检查了gradle添加到项目中的.jar文件,它包含所有预期的类,我可以打开它们并查看源代码,但不可思议的是不能在我的应用程序中使用。经过数小时的研究,我想这可能与gradle元数据有关,或者日志记录功能是多平台的,并且需要一些额外的gradle配置,但是不幸的是我不是gradle专家。

我尝试将enableFeaturePreview("GRADLE_METADATA")添加到settings.gradle,但没有任何效果。甚至尝试将“ -jvm”添加到依赖项。

implementation "io.ktor:ktor-client-logging-jvm:$ktor_version"

有了这种依赖关系,Android Studio成功找到了程序包,但是编译失败并出现以下错误

More than one file was found with OS independent path 'META-INF/ktor-http.kotlin_module'

任何人都可以阐明如何为Ktor记录器正确配置依赖项吗?

1 个答案:

答案 0 :(得分:0)

对于ktor-client-logging,您必须为每个平台设置依赖项:

commonMain {
    dependencies {
        implementation "ch.qos.logback:logback-classic:1.2.3"
        implementation "io.ktor:ktor-client-logging:$ktor_version"
    }
}

androidMain {
    dependencies {
        implementation "io.ktor:ktor-client-logging-jvm:$ktor_version"
    }
}

iosMain {
    dependencies {
        implementation "io.ktor:ktor-client-logging-native:$ktor_version"
    }
}

将元META-INF/ktor-http.kotlin_module添加到app/build.gradle块内的android {}

android {
    packagingOptions {
        exclude 'META-INF/common.kotlin_module'
        exclude 'META-INF/*.kotlin_module'
    }
}