import java.util.Properties plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.parcelize) alias(libs.plugins.ksp) alias(libs.plugins.hilt) } android { namespace = "com.safebite.app" compileSdk = 34 defaultConfig { applicationId = "com.safebite.app" minSdk = 26 targetSdk = 34 val versionProps = Properties() val versionFile = file("../version.properties") if (versionFile.exists()) { versionProps.load(versionFile.inputStream()) } versionCode = versionProps.getProperty("CODE", "1").toInt() versionName = "${versionProps.getProperty("MAJOR", "1")}.${versionProps.getProperty("MINOR", "0")}.${versionProps.getProperty("PATCH", "0")}" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } } val localProperties = Properties() val localPropertiesFile = rootProject.file("local.properties") if (localPropertiesFile.exists()) { localProperties.load(localPropertiesFile.inputStream()) } signingConfigs { create("release") { val storeFileProp = localProperties.getProperty("signing.storeFile") if (storeFileProp != null) { storeFile = file(storeFileProp) storePassword = localProperties.getProperty("signing.storePassword") keyAlias = localProperties.getProperty("signing.keyAlias") keyPassword = localProperties.getProperty("signing.keyPassword") } } } buildTypes { release { isMinifyEnabled = true isShrinkResources = true signingConfig = signingConfigs.getByName("release") proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } debug { isMinifyEnabled = false applicationIdSuffix = ".debug" isDebuggable = true } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" } buildFeatures { compose = true buildConfig = true } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" excludes += "/META-INF/DEPENDENCIES" excludes += "/META-INF/LICENSE*" excludes += "/META-INF/NOTICE*" } } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.lifecycle.viewmodel.compose) implementation(libs.androidx.lifecycle.runtime.compose) implementation(libs.androidx.activity.compose) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.material.icons.extended) implementation(libs.androidx.compose.animation) debugImplementation(libs.androidx.compose.ui.tooling) implementation(libs.androidx.navigation.compose) implementation(libs.hilt.android) implementation(libs.hilt.navigation.compose) ksp(libs.hilt.compiler) implementation(libs.androidx.room.runtime) implementation(libs.androidx.room.ktx) ksp(libs.androidx.room.compiler) implementation(libs.androidx.datastore.preferences) implementation(libs.retrofit) implementation(libs.retrofit.moshi) implementation(libs.okhttp) implementation(libs.okhttp.logging) implementation(libs.moshi) implementation(libs.moshi.kotlin) ksp(libs.moshi.codegen) implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.coroutines.play.services) implementation(libs.androidx.camera.core) implementation(libs.androidx.camera.camera2) implementation(libs.androidx.camera.lifecycle) implementation(libs.androidx.camera.view) implementation(libs.mlkit.barcode) implementation(libs.mlkit.text) implementation(libs.coil.compose) implementation(libs.timber) implementation(libs.accompanist.permissions) testImplementation(libs.junit) testImplementation(libs.truth) testImplementation(libs.mockk) testImplementation(libs.turbine) testImplementation(libs.kotlinx.coroutines.test) androidTestImplementation(libs.androidx.test.ext.junit) androidTestImplementation(libs.androidx.test.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.test.runner) androidTestImplementation(libs.androidx.test.rules) androidTestImplementation(libs.compose.ui.test.junit4) debugImplementation(libs.compose.ui.test.manifest) // LeakCanary pour détection de fuites mémoire (debug uniquement) debugImplementation(libs.leakcanary.android) }