import java.util.Properties plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.serialization) } android { namespace = "dev.zxq5.chatapp.android" compileSdk = 35 val keystorePropertiesFile = rootProject.file("local.properties") val keystoreProperties = Properties() if (keystorePropertiesFile.exists()) { keystoreProperties.load(keystorePropertiesFile.inputStream()) } signingConfigs { create("release") { storeFile = file("${System.getProperty("user.home")}/keystores/chatapp.jks") storePassword = keystoreProperties["KEYSTORE_PASSWORD"] as String? ?: System.getenv("KEYSTORE_PASSWORD") ?: "" keyAlias = "chatapp" keyPassword = keystoreProperties["KEY_PASSWORD"] as String? ?: System.getenv("KEY_PASSWORD") ?: "" } } defaultConfig { applicationId = "dev.zxq5.chatapp.android" minSdk = 26 targetSdk = 35 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = true // shrinks code isShrinkResources = true // removes unused resources signingConfig = signingConfigs.getByName("release") proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) buildConfigField("String", "BASE_URL", "\"https://chat.zxq5.dev\"") } debug { isMinifyEnabled = false isDebuggable = true applicationIdSuffix = ".debug" // lets you install both side by side buildConfigField("String", "BASE_URL", "\"http://zxq5-x1:8000\"") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } buildFeatures { compose = true buildConfig = true } } dependencies { // Ktor client implementation(libs.ktor.client.android) implementation(libs.ktor.client.content.negotiation) implementation(libs.ktor.serialization.kotlinx.json) implementation(libs.ktor.client.auth) // Auth plugin // Kotlinx Serialization implementation(libs.kotlinx.serialization.json) // Coroutines implementation(libs.kotlinx.coroutines.android) // ViewModel implementation(libs.androidx.lifecycle.viewmodel.compose) // Encrypted storage for session cookie/token implementation(libs.androidx.security.crypto) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.foundation.layout) implementation(libs.androidx.compose.material.icons.extended) testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.compose.ui.test.junit4) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) }