How to Convert an Android Library Project to a Kotlin Multiplatform (KMP) Library: A Step-by-Step Guide

Shantanu Patra
3 min readOct 5, 2024

Kotlin Multiplatform (KMP) allows developers to share code across platforms like Android, iOS, and even web or desktop applications. Converting an Android library into a KMP library can increase code reusability and maintainability. This guide will walk you through the essential steps to make the switch.

Step 1: Set Up Your Environment for Multiplatform Development

To begin, ensure you have the latest version of IntelliJ IDEA or Android Studio installed. Your IDE must support Kotlin Multiplatform development. If not already installed, make sure to:

  • Install the Kotlin Multiplatform plugin in Android Studio via File > Settings > Plugins and search for "Kotlin Multiplatform."

Next, ensure you’re using the latest version of Gradle by updating your gradle-wrapper.properties file to a recent distribution.

Step 2: Configure the Project to Use Kotlin Multiplatform

In your project’s root build.gradle.kts file, you need to modify the existing Android library configuration to work with Kotlin Multiplatform.

Start by applying the Kotlin Multiplatform plugin at the top of your root build file:

plugins {
kotlin("multiplatform") version "1.x.x"
}

Then, configure the platforms you’d like to target. For instance, to target Android and iOS:

kotlin {
android()
iosX64()
iosArm64()

sourceSets {
val commonMain by getting
val androidMain by getting
val iosMain by getting
}
}

Here, the commonMain block holds the code shared across all platforms, while androidMain and iosMain are specific for Android and iOS.

Step 3: Move Shared Code to commonMain

src/commonMain/kotlin/your/package

Place your shared code here. The common source set is platform-agnostic and will be compiled for both Android and iOS.

Step 4: Platform-Specific Code Implementation

Some functionalities, like accessing platform-specific APIs, must be written separately for each platform. These go into the respective androidMain or iosMain source sets. For example, if your library uses Android's Context or SharedPreferences, you would move this to the androidMain source set.

You can use expect and actual keywords in Kotlin to handle platform-specific implementations. In the commonMain source set, declare an expected function:

expect fun getPlatformName(): String

Then, in the Android and iOS source sets, provide actual implementations:

// Android-specific implementation
actual fun getPlatformName(): String {
return "Android"
}
// iOS-specific implementation
actual fun getPlatformName(): String {
return "iOS"
}

Step 5: Adjust Dependencies

In the build.gradle.kts file for your library, adjust your dependencies to be compatible with Kotlin Multiplatform. Dependencies need to be declared in the appropriate source set. For example, Android dependencies go in androidMain while shared libraries like kotlinx.serialization go in commonMain.

sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.x.x")
}
}
val androidMain by getting {
dependencies {
implementation("androidx.core:core-ktx:1.x.x")
}
}
}

Step 6: Test and Verify the Library

Once you’ve refactored your library, it’s important to run tests. KMP supports writing platform-specific and shared tests. Place shared tests in the commonTest directory and platform-specific tests in their respective source sets like androidTest or iosTest.

You can also use Kotlin Multiplatform Mobile (KMM) plugin to configure the iOS testing environment. Be sure to test the library on both Android and iOS devices or simulators.

Step 7: Publish the Library

Finally, after confirming that everything works correctly, it’s time to publish your Kotlin Multiplatform library. You can use tools like Maven or Bintray to distribute the library. Update your publishing configuration in the build.gradle.kts file to publish both Android and iOS variants.

publishing {
publications {
create<MavenPublication>("maven") {
from(components["kotlin"])
}
}
}

Conclusion

Converting your Android library to Kotlin Multiplatform makes it possible to share code across multiple platforms, reducing redundancy and improving maintainability. Following these steps, you can create a scalable KMP library that works seamlessly across Android, iOS, and beyond.

--

--

Shantanu Patra
Shantanu Patra

Written by Shantanu Patra

Experienced Android developer with 10+ years in mobile app development, specializing in designing, building, and optimizing high-performance Android application

No responses yet