import org.jetbrains.kotlin.gradle.dsl.JvmTarget fun String.asBuildConfigString(): String { return "\"${replace("\\", "\\\\").replace("\"", "\\\"")}\"" } val serverUrl = providers.gradleProperty("SERVER_URL") .orElse(providers.environmentVariable("SERVER_URL")) .orElse("https://msgr.jeezft.xyz") .get() .trimEnd('/') + "/" val webSocketUrl = providers.gradleProperty("WEB_SOCKET_URL") .orElse(providers.environmentVariable("WEB_SOCKET_URL")) .orElse("wss://msgr.jeezft.xyz") .get() .trimEnd('/') plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.gms) id("org.jetbrains.kotlin.plugin.serialization") version "2.2.21" id("com.google.dagger.hilt.android") id("com.google.devtools.ksp") } android { namespace = "com.aiwazian.messenger" compileSdk = 36 defaultConfig { applicationId = "com.aiwazian.messenger" minSdk = 28 targetSdk = 36 versionCode = 15 versionName = "1.7.0" buildConfigField("String", "SERVER_URL", serverUrl.asBuildConfigString()) buildConfigField("String", "WEB_SOCKET_URL", webSocketUrl.asBuildConfigString()) testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = true isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) signingConfig = signingConfigs.getByName("debug") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } buildFeatures { compose = true viewBinding = true buildConfig = true } buildToolsVersion = "36.0.0" dependenciesInfo { includeInApk = false includeInBundle = false } kotlin { compilerOptions { jvmTarget = JvmTarget.JVM_17 } } } dependencies { // Firebase implementation(platform(libs.firebase.bom)) implementation(libs.firebase.messaging) implementation(libs.firebase.analytics) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.core.ktx) implementation(libs.androidx.animation) implementation(libs.androidx.material3) implementation(libs.androidx.material.icons.extended.android) implementation(libs.androidx.foundation) implementation(libs.androidx.activity.compose) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.lifecycle.viewmodel.compose) // DataStore implementation(libs.androidx.datastore.preferences) implementation(libs.accompanist.systemuicontroller) implementation(libs.accompanist.navigation.material) implementation(libs.accompanist.navigation.animation) implementation(libs.protobuf.javalite) implementation(libs.retrofit) implementation(libs.converter.gson) implementation(libs.kotlinx.serialization.json) // Ktor implementation(libs.ktor.client.core) implementation(libs.ktor.client.okhttp) implementation(libs.ktor.client.websockets) implementation(libs.coil.compose) // Lottie animation implementation(libs.lottie.compose) implementation(libs.zxing.android.embedded) implementation(libs.okhttp) implementation(libs.socket.io.client) // Dagger Hilt implementation(libs.hilt.android) implementation(libs.androidx.graphics.shapes) debugImplementation(libs.androidx.compose.ui.tooling) ksp(libs.hilt.compiler) implementation(libs.androidx.hilt.navigation.compose) // Room database implementation(libs.androidx.room.runtime) ksp(libs.androidx.room.compiler) implementation(libs.androidx.room.ktx) implementation(libs.material.icons.extended) }