133 lines
4.6 KiB
Kotlin
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 = "../.."
|
|
}
|