import java.util.Properties import java.io.FileInputStream 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") } // Load keystore properties from key.properties file val keystorePropertiesFile = rootProject.file("key.properties") val keystoreProperties = Properties() if (keystorePropertiesFile.exists()) { keystoreProperties.load(FileInputStream(keystorePropertiesFile)) } fun resolveSigningValue(propertyKey: String, envKey: String): String? { val envValue = System.getenv(envKey)?.takeIf { it.isNotBlank() } if (envValue != null) { return envValue } return (keystoreProperties[propertyKey] as? String)?.takeIf { it.isNotBlank() } } val releaseKeyAlias = resolveSigningValue("keyAlias", "ANDROID_KEY_ALIAS") val releaseKeyPassword = resolveSigningValue("keyPassword", "ANDROID_KEY_PASSWORD") val releaseStorePassword = resolveSigningValue("storePassword", "ANDROID_STORE_PASSWORD") val releaseStoreFilePath = resolveSigningValue("storeFile", "ANDROID_STORE_FILE") val hasReleaseSigning = releaseKeyAlias != null && releaseKeyPassword != null && releaseStorePassword != null && releaseStoreFilePath != null android { namespace = "com.meshcore.sar.meshcore_sar_app" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion // Enable BuildConfig generation buildFeatures { buildConfig = true } compileOptions { isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } defaultConfig { applicationId = "com.meshcore.sar.meshcore_sar_app" minSdk = flutter.minSdkVersion targetSdk = flutter.targetSdkVersion versionCode = flutter.versionCode versionName = flutter.versionName // Inject commit hash from environment variable (set by GitHub Actions) // Falls back to "dev" for local development builds val commitHash = System.getenv("COMMIT_HASH") ?: "dev" buildConfigField("String", "COMMIT_HASH", "\"$commitHash\"") } signingConfigs { if (hasReleaseSigning) { create("release") { keyAlias = releaseKeyAlias keyPassword = releaseKeyPassword storeFile = file(releaseStoreFilePath!!) storePassword = releaseStorePassword } } } buildTypes { release { signingConfig = if (hasReleaseSigning) { signingConfigs.getByName("release") } else { // Keep CI release builds working even when private keystore isn't provided. signingConfigs.getByName("debug") } } } } flutter { source = "../.." } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4") }