Kotlin多平台(KMP)documentation用于在现有项目中添加共享模块的documentation很棒。简洁,实用,专注于完成工作。但是有时有一些(合理的)假设,如果不正确,可能会花费大量时间来弄清楚。
在我对KMP进行实验时,我偶然发现了这样一个问题。您会看到我尝试在现有的Android应用中添加共享的Kotlin模块。我遵循了文档,但在第一个也是最基本的步骤中失败了:创建一个乘数模块。尽管如此,我学到了有用的东西,我想分享,这可能会在您的KMP旅程中节省一些时间。
因此,文档指示您安装Kotlin Multiplatform Mobile plugin,然后创建一个新的“ Kotlin Multiplatform共享模块”。您最终将获得一个带有自己的build.gradle.kts
的新模块。问题是该文件旨在用于不使用Gradle Version Catalog的项目。如果您的Android项目正在使用这种较新的处理依赖项,则Gradle Sync将失败此新共享模块。
问题似乎是构建文件的plugin
部分不包含插件的任何版本:
plugins {
kotlin("multiplatform")
id("com.android.library")
}
[...]
一个简单的修复方法是仅设置这些插件声明的特定版本:
plugins {
// The Kotlin version you use in your Android project
kotlin("multiplatform") version "1.8.21"
// The Android Gradle Plugin version you use your Android project
id("com.android.library") version "8.0.2"
}
[...]
但是,要解决此问题的正确方法,因为您使用的是Gradle版本目录,就是在libs.versions.toml
中声明它们:
[versions]
androidGradlePlugin = "8.0.2"
kotlin = "1.8.21"
[plugins]
android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
libs.versions.toml
然后修改build.gradle.kts
如下:
@Suppress("DSL_SCOPE_VIOLATION") // Remove when fixed https://youtrack.jetbrains.com/issue/KTIJ-19369
plugins {
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.android.library)
}
build.gradle.kts
这些更改将使Gradle Sync成功,您将确保插件的版本保持在整个项目中同步。
希望,这将为您节省您的KMP旅程。
快乐编码!