Files
myice-kmp/composeApp/build.gradle.kts
T
herel 8c2de8b475 build: configure release signing for Android APK
Reads keystore credentials from keystore.properties (gitignored).
Keystore file (myice.keystore) is also gitignored.
2026-07-09 16:05:49 +02:00

129 lines
4.0 KiB
Kotlin

import org.jetbrains.compose.desktop.application.dsl.TargetFormat
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import java.util.Properties
import java.io.FileInputStream
plugins {
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.compose.multiplatform)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.android.application)
}
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
kotlin {
androidTarget {
compilations.all {
compileTaskProvider.configure {
compilerOptions.jvmTarget.set(JvmTarget.JVM_11)
}
}
}
iosArm64()
iosSimulatorArm64()
jvm("desktop")
sourceSets {
val commonMain by getting {
dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.components.uiToolingPreview)
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.datetime)
implementation(libs.multiplatform.settings)
implementation(libs.multiplatform.settings.no.arg)
implementation(libs.lifecycle.viewmodel.compose)
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
implementation(libs.ktor.client.mock)
implementation(libs.kotlinx.coroutines.test)
implementation(libs.multiplatform.settings.test)
}
}
val androidMain by getting {
dependencies {
implementation(libs.ktor.client.cio)
implementation(libs.androidx.activity.compose)
}
}
val desktopMain by getting {
dependencies {
implementation(libs.ktor.client.cio)
implementation(libs.kotlinx.coroutines.swing)
implementation(compose.desktop.currentOs)
}
}
}
// Darwin engine for all iOS targets
targets.filterIsInstance<org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget>()
.filter { it.konanTarget.family == org.jetbrains.kotlin.konan.target.Family.IOS }
.forEach { target ->
target.compilations.getByName("main").dependencies {
implementation(libs.ktor.client.darwin)
}
}
}
android {
namespace = "ch.parano.myice"
compileSdk = 36
defaultConfig {
applicationId = "ch.parano.myice"
minSdk = 24
targetSdk = 35
versionCode = 1
versionName = "1.0"
}
signingConfigs {
create("release") {
keystoreProperties["storeFile"]?.let { storeFile = rootProject.file(it) }
storePassword = keystoreProperties["storePassword"] as String?
keyAlias = keystoreProperties["keyAlias"] as String?
keyPassword = keystoreProperties["keyPassword"] as String?
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = false
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
compose.desktop {
application {
mainClass = "ch.parano.myice.MainKt"
nativeDistributions {
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
packageName = "myice"
packageVersion = "1.0.0"
}
}
}