Files
Krow-workspace/apps/mobile/apps/staff/android/app/build.gradle.kts

133 lines
4.6 KiB
Kotlin

import java.util.Base64
import java.util.Properties
plugins {
id("com.android.application")
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
id("com.google.gms.google-services")
}
val dartDefinesString = project.findProperty("dart-defines") as? String ?: ""
val dartEnvironmentVariables = mutableMapOf<String, String>()
dartDefinesString.split(",").forEach {
if (it.isNotEmpty()) {
val decoded = String(Base64.getDecoder().decode(it))
val components = decoded.split("=")
if (components.size == 2) {
dartEnvironmentVariables[components[0]] = components[1]
}
}
}
// Load flavor-specific key properties: key.dev.properties, key.stage.properties, key.prod.properties
// The active flavor is resolved from the Gradle task name (e.g. assembleDevRelease -> dev)
fun resolveFlavorFromTask(): String {
val taskNames = gradle.startParameter.taskNames.joinToString(" ").lowercase()
return when {
taskNames.contains("prod") -> "prod"
taskNames.contains("stage") -> "stage"
else -> "dev"
}
}
val activeFlavorForSigning = resolveFlavorFromTask()
val keystoreProperties = Properties().apply {
val propertiesFile = rootProject.file("key.${activeFlavorForSigning}.properties")
if (propertiesFile.exists()) {
load(propertiesFile.inputStream())
}
}
android {
namespace = "com.krowwithus.staff"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
defaultConfig {
// applicationId is set per flavor below
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
manifestPlaceholders["GOOGLE_MAPS_API_KEY"] = dartEnvironmentVariables["GOOGLE_MAPS_API_KEY"] ?: ""
}
flavorDimensions += "environment"
productFlavors {
create("dev") {
dimension = "environment"
applicationId = "dev.krowwithus.staff"
resValue("string", "app_name", "KROW With Us [DEV]")
}
create("stage") {
dimension = "environment"
applicationId = "stage.krowwithus.staff"
resValue("string", "app_name", "KROW With Us [STG]")
}
create("prod") {
dimension = "environment"
applicationId = "prod.krowwithus.staff"
resValue("string", "app_name", "KROW Staff")
}
}
signingConfigs {
create("release") {
if (System.getenv()["CI"] == "true") {
// CodeMagic CI environment
storeFile = file(System.getenv()["CM_KEYSTORE_PATH"] ?: "")
storePassword = System.getenv()["CM_KEYSTORE_PASSWORD"]
keyAlias = System.getenv()["CM_KEY_ALIAS"]
keyPassword = System.getenv()["CM_KEY_PASSWORD"]
} else {
// Local development environment — loads from key.<flavor>.properties
keyAlias = keystoreProperties["keyAlias"] as String?
keyPassword = keystoreProperties["keyPassword"] as String?
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
storePassword = keystoreProperties["storePassword"] as String?
}
}
}
buildTypes {
debug {
// Use default debug signing for local dev (no keystore required)
signingConfig = signingConfigs.getByName("debug")
}
release {
signingConfig = signingConfigs.getByName("release")
}
}
}
// Skip google-services processing for flavors whose google-services.json
// contains placeholder values (e.g. prod before the Firebase project exists).
// Once a real config is dropped in, the task automatically re-enables.
afterEvaluate {
tasks.matching {
it.name.startsWith("process") && it.name.endsWith("GoogleServices")
}.configureEach {
val taskFlavor = name.removePrefix("process").removeSuffix("GoogleServices")
.removeSuffix("Debug").removeSuffix("Release").lowercase()
val configFile = file("src/$taskFlavor/google-services.json")
enabled = configFile.exists() && configFile.readText().contains("\"mobilesdk_app_id\": \"1:")
}
}
flutter {
source = "../.."
}