Adding Third-Party Dependencies in a KMP
Kotlin Multiplatform (KMP) allows you to share code between multiple platforms such as Android, iOS, and web applications. Adding third-party dependencies can significantly streamline development. Here's a straightforward guide to adding these dependencies to your KMP project, using the Napier logging library as an example.
Prerequisites
Kotlin Multiplatform project setup: Ensure you have a working KMP project.
Kotlin version: Verify that you're using a compatible Kotlin version for your dependencies.
Steps to Add Third-Party Dependencies
1. Identify Compatible Dependencies
Ensure that the third-party library supports Kotlin Multiplatform. Napier is a well-known logging library that supports KMP.
2. Modify the build.gradle.kts
File
Open your project’s build.gradle.kts
file. You need to add the dependencies in the appropriate source sets.
3. Add Dependency to Common Source Set
Add the dependency to the common source set if it’s available for all platforms.
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.github.aakira:napier:2.1.0")
}
}
}
}
4. Add Platform-Specific Dependencies
If the library has platform-specific implementations, add them to the respective source sets. For Napier, additional setup might not be necessary unless you want to customize platform-specific logging behavior. However, we will demonstrate adding some real platform-specific dependencies as examples.
Android
For Android, let's add Timber
as an additional logging dependency.
kotlin {
sourceSets {
val androidMain by getting {
dependencies {
implementation("com.jakewharton.timber:timber:5.0.1")
}
}
}
}
iOS
For iOS, let's add a specific dependency like Ktor
for network operations as an example.
kotlin {
sourceSets {
val iosMain by getting {
dependencies {
implementation("io.ktor:ktor-client-ios:2.0.0")
}
}
}
}
5. Sync the Project
Sync your project to download and include the new dependencies.
6. Usage in Code
Import and use the library in your shared code or platform-specific code as required.
import io.github.aakira.napier.Napier
fun logMessage(message: String) {
Napier.d(message)
}
Edge Cases
Platform Limitations: Some libraries may only support specific platforms. Always check the library documentation.
Version Conflicts: Ensure that the versions of the libraries are compatible with your Kotlin version and with each other.
Platform-Specific Implementations: Some libraries might require different implementations for different platforms. Manage these in respective source sets.
Example
Here’s an example of adding the Napier logging library to your KMP project.
Adding to build.gradle.kts
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.github.aakira:napier:2.1.0")
}
}
val androidMain by getting {
dependencies {
implementation("com.jakewharton.timber:timber:5.0.1")
}
}
val iosMain by getting {
dependencies {
implementation("io.ktor:ktor-client-ios:2.0.0")
}
}
}
}
Usage in Shared Code
import io.github.aakira.napier.Napier
fun logMessage(message: String) {
Napier.d(message)
}
Initialization
Initialize Napier in your platform-specific code if needed:
Android
import android.app.Application
import io.github.aakira.napier.DebugAntilog
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
Napier.base(DebugAntilog())
}
}
iOS
import Napier
fun initializeNapier() {
Napier.base(DebugAntilog())
}
Conclusion
Adding third-party dependencies in a KMP app is straightforward but requires attention to platform-specific details. Always ensure compatibility and manage dependencies appropriately in your source sets to streamline development and maximize code reuse across platforms. Using Napier as an example, you can easily integrate logging into your KMP projects while leveraging additional platform-specific libraries like Timber for Android and Ktor for iOS.
Subscribe to my newsletter
Read articles from Codefy Labs directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Codefy Labs
Codefy Labs
We build products that scale