git.iko.soy/parseable-android
on master help sign in
parseable-android/app/build.gradle.kts
142 lines 4.1 kB history raw
1import java.time.Instant
2import java.time.ZoneOffset
3import java.time.format.DateTimeFormatter
5plugins {
6 alias(libs.plugins.android.application)
7 alias(libs.plugins.kotlin.android)
8 alias(libs.plugins.kotlin.compose)
9 alias(libs.plugins.kotlin.serialization)
10 alias(libs.plugins.hilt)
11 alias(libs.plugins.ksp)
14val commitEpoch = providers.exec {
15 commandLine("git", "log", "-1", "--format=%ct")
16}.standardOutput.asText.get().trim().toLong()
17val commitTime = Instant.ofEpochSecond(commitEpoch).atZone(ZoneOffset.UTC)
18val dateVersionName = commitTime.format(DateTimeFormatter.ofPattern("yyyy.MM.dd.HHmm"))
19val dateVersionCode = (commitEpoch / 60).toInt()
21android {
22 namespace = "com.parseable.android"
23 compileSdk = 35
25 defaultConfig {
26 applicationId = "com.parseable.android"
27 minSdk = 26
28 targetSdk = 35
29 versionCode = dateVersionCode
30 versionName = dateVersionName
32 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
33 }
35 signingConfigs {
36 if (System.getenv("RELEASE_KEYSTORE_FILE") != null) {
37 create("release") {
38 storeFile = file(System.getenv("RELEASE_KEYSTORE_FILE"))
39 storePassword = System.getenv("RELEASE_KEYSTORE_PASSWORD")
40 keyAlias = System.getenv("RELEASE_KEY_ALIAS")
41 keyPassword = System.getenv("RELEASE_KEY_PASSWORD")
42 }
43 }
44 }
46 buildTypes {
47 release {
48 isMinifyEnabled = true
49 isShrinkResources = true
50 signingConfig = signingConfigs.findByName("release") ?: signingConfigs.getByName("debug")
51 proguardFiles(
52 getDefaultProguardFile("proguard-android-optimize.txt"),
53 "proguard-rules.pro"
54 )
55 }
56 debug {
57 isMinifyEnabled = false
58 applicationIdSuffix = ".debug"
59 }
60 }
62 compileOptions {
63 sourceCompatibility = JavaVersion.VERSION_17
64 targetCompatibility = JavaVersion.VERSION_17
65 }
67 kotlinOptions {
68 jvmTarget = "17"
69 }
71 buildFeatures {
72 compose = true
73 buildConfig = true
74 }
76 testOptions {
77 unitTests.isReturnDefaultValues = true
78 }
81ksp {
82 arg("room.schemaLocation", "$projectDir/schemas")
85dependencies {
86 // Core Android
87 implementation(libs.core.ktx)
88 implementation(libs.lifecycle.runtime)
89 implementation(libs.lifecycle.viewmodel.compose)
90 implementation(libs.activity.compose)
92 // Compose BOM
93 implementation(platform(libs.compose.bom))
94 implementation(libs.compose.ui)
95 implementation(libs.compose.ui.graphics)
96 implementation(libs.compose.ui.tooling.preview)
97 implementation(libs.compose.material3)
98 implementation(libs.compose.material.icons)
100 // Navigation
101 implementation(libs.navigation.compose)
103 // Hilt DI
104 implementation(libs.hilt.android)
105 ksp(libs.hilt.compiler)
106 implementation(libs.hilt.navigation.compose)
108 // Networking
109 implementation(libs.okhttp)
111 // Serialization
112 implementation(libs.kotlinx.serialization.json)
114 // DataStore for preferences
115 implementation(libs.datastore.preferences)
117 // Encrypted storage — alpha06 is the latest available; stable 1.1.0 has not shipped.
118 // Fallback to 1.0.0 is not viable as it uses the deprecated MasterKeys API.
119 implementation(libs.security.crypto)
121 // Room database for favorites
122 implementation(libs.room.runtime)
123 implementation(libs.room.ktx)
124 ksp(libs.room.compiler)
126 // Coroutines
127 implementation(libs.coroutines.android)
129 // Logging
130 implementation(libs.timber)
132 // Testing
133 testImplementation(libs.junit)
134 testImplementation(libs.coroutines.test)
135 testImplementation(libs.mockk)
136 androidTestImplementation(libs.android.test.ext)
137 androidTestImplementation(libs.espresso.core)
138 androidTestImplementation(platform(libs.compose.bom))
139 androidTestImplementation(libs.compose.ui.test)
140 debugImplementation(libs.compose.ui.tooling)
141 debugImplementation(libs.compose.ui.test.manifest)