DEV Community

RockAndNull
RockAndNull

Posted on • Originally published at rockandnull.com on

How to add Kotlin Multiplatform to an Android project that is using Gradle Version Catalog

How to add Kotlin Multiplatform to an Android project that is using Gradle Version Catalog

Kotlin Multiplatform (KMP) documentation for adding a shared module to an existing project is great. It's concise, practical, and focused on getting things done. But sometimes there are some (reasonable) assumptions that if do not hold true might cost you a significant amount of time to figure out.

During my experimentation with KMP, I stumbled upon such an issue. You see I tried to add a shared Kotlin module in an existing Android app. I followed the documentation but it failed in the very first and most basic step: creating a multiplatform module. Nevertheless, I learned useful things that I want to share that might save you some time in your KMP journey.

So the documentation instructs you to install the Kotlin Multiplatform Mobile plugin, and then create a new "Kotlin Multiplatform Shared Module". You will end up with a new module with its own build.gradle.kts. The problem is that the file is intended for projects that are not using the Gradle Version Catalog. If your Android project is using this newer way of handling dependencies, the Gradle sync will fail for this new shared module.

The problem seems to be that the build file's plugin section does not contain any versions for the plugins:

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

[...]
Enter fullscreen mode Exit fullscreen mode

An easy fix would be to just set the specific versions for these plugin declarations:

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"
}

[...]
Enter fullscreen mode Exit fullscreen mode

But the proper way to fix this, since you are using Gradle Version Catalog, is to declare them in your 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" }
Enter fullscreen mode Exit fullscreen mode

libs.versions.toml

And then modify the build.gradle.kts as follow:

@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)
}
Enter fullscreen mode Exit fullscreen mode

build.gradle.kts

These changes will make the Gradle sync succeed and you will ensure that the versions for the plugins stay synced across the project.

Hopefully, this will save you some time in your KMP journey.

Happy coding!

Latest comments (0)