import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.plugin.compose") id("org.jetbrains.kotlin.plugin.serialization") } android { namespace = "rs.rhema.phone" compileSdk = 36 defaultConfig { applicationId = "rs.rhema.phone" minSdk = 26 targetSdk = 36 versionCode = 1 versionName = "0.1.0" } signingConfigs { // Debug builds must install over each other, so the signing key // may not depend on the machine that ran the build: CI artifacts // share the identity of every local build via the committed // android/debug.keystore. A debug key guards nothing — this is // the conventional Android Debug identity, password "android" — // while a stable signature is what makes the artifacts updatable. getByName("debug") { storeFile = rootProject.file("debug.keystore") storePassword = "android" keyAlias = "androiddebugkey" keyPassword = "android" } // The release key anchors the future edge channel: whatever is // signed with it can silently update an install that trusts the // channel, so it must not travel with the source. It exists only // as a CI secret (see .gitea/workflows/android.yml); blank // environment — local builds, fork PRs — leaves release unsigned. create("release") { storeFile = System.getenv("ANDROID_RELEASE_KEYSTORE") ?.takeIf { it.isNotBlank() }?.let { rootProject.file(it) } storePassword = System.getenv("ANDROID_RELEASE_KEYSTORE_PASSWORD") ?.takeIf { it.isNotBlank() } keyAlias = "rhema-release" keyPassword = storePassword } } buildTypes { release { isMinifyEnabled = false // Signed only where the release credentials exist; the // unsigned artifact is a build check, never a deliverable. if (!System.getenv("ANDROID_RELEASE_KEYSTORE") .isNullOrBlank() ) { signingConfig = signingConfigs.getByName("release") } } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } } buildFeatures { compose = true } } dependencies { implementation(platform("androidx.compose:compose-bom:2025.12.01")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.foundation:foundation") implementation("androidx.compose.material3:material3") implementation("androidx.compose.material:material-icons-core") implementation("androidx.activity:activity-compose:1.12.4") implementation("androidx.core:core-ktx:1.17.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.9.4") implementation("androidx.datastore:datastore-preferences:1.1.7") implementation("androidx.work:work-runtime-ktx:2.12.0") implementation("com.squareup.okhttp3:okhttp:4.12.0") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2") // 0.42+ declares minCompileSdk 37 in its AAR metadata; the project's // AGP tops out at 36. Revisit when AGP moves. implementation("com.mikepenz:multiplatform-markdown-renderer:0.41.0") implementation("com.mikepenz:multiplatform-markdown-renderer-m3:0.41.0") }