import com.android.build.api.dsl.SigningConfig import org.apache.commons.io.output.ByteArrayOutputStream import org.jetbrains.kotlin.gradle.dsl.JvmTarget import java.nio.charset.Charset plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.plugin.compose") id("org.jetbrains.kotlin.plugin.serialization") id("com.google.dagger.hilt.android") id("com.google.devtools.ksp") } android { namespace = "com.pixelized.headache" compileSdk = 36 signingConfigs { create("pixelized") { populatePixelizedSigningConfig() } } defaultConfig { namespace = "com.pixelized.headache" minSdk = 26 targetSdk = 36 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { debug { applicationIdSuffix = ".dev" isDebuggable = true isMinifyEnabled = false defaultConfig { versionCode = 1 } proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } release { isDebuggable = false isMinifyEnabled = true signingConfig = signingConfigs.getByName("pixelized") defaultConfig { versionCode = getGitBuildNumber() } proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } kotlin { compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } compilerOptions { jvmTarget = JvmTarget.JVM_11 freeCompilerArgs = listOf("-XXLanguage:+PropertyParamAnnotationDefaultTargetMode") } } buildFeatures { compose = true } } dependencies { // Android implementation("androidx.core:core-ktx:1.17.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.9.4") implementation("androidx.activity:activity-compose:1.11.0") implementation("androidx.compose.ui:ui:1.9.3") implementation("androidx.compose.ui:ui-graphics:1.9.3") implementation("androidx.compose.ui:ui-tooling:1.9.3") implementation("androidx.compose.ui:ui-tooling-preview:1.9.3") // Material implementation("androidx.compose.material3:material3:1.4.0") implementation("androidx.compose.material:material-icons-extended:1.7.8") implementation("androidx.compose.material3:material3-window-size-class:1.4.0") implementation("androidx.compose.material3.adaptive:adaptive-layout:1.1.0") // Navigation implementation("androidx.navigation3:navigation3-runtime:1.0.0-alpha11") implementation("androidx.navigation3:navigation3-ui:1.0.0-alpha11") implementation("androidx.compose.material3.adaptive:adaptive-navigation3:1.0.0-SNAPSHOT") implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:1.0.0-SNAPSHOT") // Preferences implementation("androidx.datastore:datastore-preferences:1.1.7") // Json implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.9.0") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0") // Injection implementation("androidx.hilt:hilt-navigation-compose:1.3.0") implementation("com.google.dagger:hilt-android:2.57.2") ksp("com.google.dagger:hilt-compiler:2.57.2") } @Suppress("DEPRECATION") private fun getGitBuildNumber( charset: Charset = Charset.defaultCharset(), ): Int { return ByteArrayOutputStream().use { stream -> rootProject.exec { commandLine("git", "rev-list", "--count", "HEAD") standardOutput = stream } stream.toString(charset).trim().toIntOrNull() ?: 1 } } fun SigningConfig.populatePixelizedSigningConfig() { storeFile = (project.properties["PIXELIZED_RELEASE_STORE_FILE"] as? String)?.let { file(it) } storePassword = project.properties["PIXELIZED_RELEASE_STORE_PASSWORD"] as? String keyAlias = project.properties["PIXELIZED_RELEASE_KEY_ALIAS"] as? String keyPassword = project.properties["PIXELIZED_RELEASE_KEY_PASSWORD"] as? String }