plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.compose) alias(libs.plugins.google.devtools.ksp) alias(libs.plugins.secrets) } android { namespace = "com.example" compileSdk { version = release(36) { minorApiLevel = 1 } } defaultConfig { applicationId = "com.aistudio.swipeplay.pqrmx" minSdk = 24 targetSdk = 36 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } // Do not remove or modify these signingConfigs. They are necessary for building, installing, // and updating Android apps in AI Studio. signingConfigs { create("release") { val keystorePath = System.getenv("KEYSTORE_PATH") ?: "${rootDir}/my-upload-key.jks" storeFile = file(keystorePath) storePassword = System.getenv("STORE_PASSWORD") keyAlias = "upload" keyPassword = System.getenv("KEY_PASSWORD") } create("debugConfig") { storeFile = file("${rootDir}/debug.keystore") storePassword = "android" keyAlias = "androiddebugkey" keyPassword = "android" } } buildTypes { release { isCrunchPngs = false isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") // Do not remove or modify this signingConfig assignment. It is necessary for Android apps in // AI Studio. signingConfig = signingConfigs.getByName("release") } debug { // Do not remove or modify this signingConfig assignment. It is necessary for Android apps in // AI Studio. signingConfig = signingConfigs.getByName("debugConfig") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } buildFeatures { compose = true buildConfig = true } testOptions { unitTests { isIncludeAndroidResources = true } } dependenciesInfo { includeInApk = false includeInBundle = true } } // Configure the Secrets Gradle Plugin to use .env and .env.example files // to match the convention used in Web projects. secrets { propertiesFileName = ".env" defaultPropertiesFileName = ".env.example" ignoreList.add("FIREBASE_APPCHECK_DEBUG_TOKEN") } // Some unused dependencies are commented out below instead of being removed. // This makes it easy to add them back in the future if needed. dependencies { implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material.icons.core) implementation(libs.androidx.compose.material.icons.extended) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.core.ktx) implementation(libs.androidx.datastore.preferences) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.lifecycle.viewmodel.compose) implementation(libs.androidx.room.ktx) implementation(libs.androidx.room.runtime) implementation(libs.coil.compose) // Media3 ExoPlayer and MediaSession implementation(libs.androidx.media3.exoplayer) implementation(libs.androidx.media3.ui) implementation(libs.androidx.media3.session) implementation(libs.androidx.media3.common) implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.coroutines.core) testImplementation(libs.androidx.compose.ui.test.junit4) testImplementation(libs.androidx.core) testImplementation(libs.androidx.junit) testImplementation(libs.junit) testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.robolectric) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.compose.ui.test.junit4) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.runner) debugImplementation(libs.androidx.compose.ui.test.manifest) debugImplementation(libs.androidx.compose.ui.tooling) "ksp"(libs.androidx.room.compiler) }