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 for local builds val keystorePropertiesFile = rootProject.file("key.properties") val keystoreProperties = Properties() if (keystorePropertiesFile.exists()) { keystoreProperties.load(FileInputStream(keystorePropertiesFile)) } android { namespace = "com.zarz.spotiflac" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion buildFeatures { buildConfig = true } compileOptions { isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlin { compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) } } signingConfigs { if (keystorePropertiesFile.exists()) { create("release") { keyAlias = keystoreProperties.getProperty("keyAlias") keyPassword = keystoreProperties.getProperty("keyPassword") storeFile = file(keystoreProperties.getProperty("storeFile")) storePassword = keystoreProperties.getProperty("storePassword") } } } defaultConfig { applicationId = "com.zarz.spotiflac" minSdk = flutter.minSdkVersion targetSdk = 36 versionCode = flutter.versionCode versionName = flutter.versionName multiDexEnabled = true ndk { abiFilters += listOf("arm64-v8a", "armeabi-v7a") } } buildTypes { getByName("debug") { ndk { debugSymbolLevel = "FULL" } } getByName("profile") { ndk { debugSymbolLevel = "FULL" } } release { // For local builds: use release signing if key.properties exists // For CI builds: APK is signed by GitHub Action after build signingConfig = if (keystorePropertiesFile.exists()) { signingConfigs.getByName("release") } else { signingConfigs.getByName("debug") } isMinifyEnabled = true isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) ndk { debugSymbolLevel = "FULL" } } } // Split APKs by ABI for smaller individual downloads splits { abi { isEnable = true reset() include("arm64-v8a", "armeabi-v7a") isUniversalApk = true // Also generate universal APK } } } flutter { source = "../.." } repositories { flatDir { dirs("libs") } } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") // Include all AAR and JAR files from libs folder implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar")))) implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.10.0") implementation("androidx.documentfile:documentfile:1.1.0") implementation("androidx.activity:activity-ktx:1.13.0") implementation("com.antonkarpenko:ffmpeg-kit-full:2.1.0") }