import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.ksp) alias(libs.plugins.detekt) alias(libs.plugins.spotless) } android { namespace = "com.atridad.ascently" compileSdk = 36 defaultConfig { applicationId = "com.atridad.ascently" minSdk = 31 targetSdk = 36 versionCode = 51 versionName = "2.5.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro", ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } } buildFeatures { compose = true buildConfig = true } } kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } } dependencies { // Core Android libraries implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) // Compose BOM and UI implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.ui) implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) implementation(libs.androidx.material.icons.extended) // Room Database implementation(libs.androidx.room.runtime) implementation(libs.androidx.room.ktx) implementation(libs.androidx.exifinterface) ksp(libs.androidx.room.compiler) // Navigation implementation(libs.androidx.navigation.compose) // ViewModel implementation(libs.androidx.lifecycle.viewmodel.compose) // Serialization implementation(libs.kotlinx.serialization.json) // Coroutines implementation(libs.kotlinx.coroutines.android) // Image Loading implementation(libs.coil.compose) // Health Connect implementation(libs.health.connect) // Testing testImplementation(libs.junit) testImplementation(libs.mockk) testImplementation(libs.kotlinx.coroutines.test) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.test.core) androidTestImplementation(libs.androidx.test.ext) androidTestImplementation(libs.androidx.test.runner) androidTestImplementation(libs.androidx.test.rules) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) } // Detekt configuration detekt { config.setFrom(files("$rootDir/detekt.yml")) buildUponDefaultConfig = true allRules = false parallel = true } // Spotless configuration for code formatting spotless { kotlin { target("**/*.kt") targetExclude("**/build/**/*.kt") ktlint("1.2.1") .editorConfigOverride( mapOf( "ktlint_standard_no-wildcard-imports" to "disabled", "ktlint_standard_package-name" to "disabled", "ktlint_standard_function-naming" to "disabled", "ktlint_standard_filename" to "disabled", "ktlint_standard_value-parameter-comment" to "disabled", "ktlint_standard_comment-wrapping" to "disabled", "ktlint_standard_multiline-expression-wrapping" to "disabled", "ktlint_standard_string-template-indent" to "disabled", "ktlint_standard_property-naming" to "disabled", "ktlint_standard_class-naming" to "disabled", "ktlint_standard_backing-property-naming" to "disabled", "ktlint_standard_function-signature" to "disabled", "ktlint_standard_parameter-list-wrapping" to "disabled", "ktlint_standard_max-line-length" to "disabled", "max_line_length" to "off", ), ) } kotlinGradle { target("**/*.kts") targetExclude("**/build/**/*.kts") ktlint("1.2.1") .editorConfigOverride( mapOf( "ktlint_standard_no-wildcard-imports" to "disabled", "max_line_length" to "off", ), ) } }