Simplify your Kotlin Multiplatform project configurations with reusable build logic setups. Ideal for multi-module projects, this setup reduces boilerplate, standardizes configurations, supports commitlint, and streamlines publishing with Gradle.
This repository offers a centralized setup for Koltin Multiplatform build configurations, including the following conventions:
- Standardized Build Configurations: Predefined configurations for Kotlin Multiplatform App and Library.
- Conventional Commit Linting: Integrated support for enforcing conventional commit messages.
- Streamlined Publishing Settings: Simplified configuration for publishing artifacts to GitHub Packages.
To integrate this build logic into your Kotlin Multiplatform project, follow the steps below.
Add the custom plugin repository to your root project settings.gradle.kts
:
pluginManagement {
repositories {
maven(url = "https://maven.pkg.github.com/Kt-Kraft/build-logic/") {
name = "GitHubPackages"
credentials {
username = providers.gradleProperty("github.username").orNull
?: System.getenv("GITHUB_USERNAME")
password = providers.gradleProperty("github.token").orNull
?: System.getenv("GITHUB_TOKEN")
}
}
google()
mavenCentral()
gradlePluginPortal()
}
}
Add plugin aliases and configurations in your root project’s build.gradle.kts
:
plugins {
alias(libs.plugins.jetbrains.compose) apply false
alias(libs.plugins.kotlin.multiplatform) apply false
alias(libs.plugins.convention.multiplatform) apply false
alias(libs.plugins.convention.android.app) apply false
alias(libs.plugins.convention.android.lib) apply false
alias(libs.plugins.convention.compose.app) apply false
alias(libs.plugins.convention.compose.lib) apply false
alias(libs.plugins.convention.publishing) apply false
alias(libs.plugins.convention.android.config)
alias(libs.plugins.convention.publish.config)
alias(libs.plugins.convention.commitlint)
}
// Initial configuration for subprojects
convention {
multiplatform {
android.set(true)
iOS.set(true)
}
android {
minSdk.set(28)
targetSdk.set(35)
compileSdk.set(35)
}
publishing {
pom {
setGitHubProject {
owner = "Kt-Kraft"
repository = "easy-multiplatform"
}
licenses { mit() }
developers {
developer(
id = "indramahkota",
name = "Indra Mahkota",
email = "indramahkota1@gmail.com",
)
}
}
}
}
In your submodule build.gradle.kts
files, apply the necessary plugins:
plugins {
alias(libs.plugins.convention.compose.app)
alias(libs.plugins.secret.gradle.plugin)
}
// or
plugins {
alias(libs.plugins.convention.android.lib)
alias(libs.plugins.convention.publishing)
}