All dependencies are managed via gradle/libs.versions.toml (Gradle version catalog):
[versions]
agp = "9.2.1"
kotlin = "2.2.10"
composeBom = "2026.02.01"
hilt = "2.59.2"
room = "2.7.1"
# ... 35+ entries
[libraries]
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
# ... 50+ entries
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } Single dimension distribution across ALL modules:
flavorDimensions += "distribution"
productFlavors {
create("github") { dimension = "distribution" }
create("playstore") { dimension = "distribution" }
} | Flavor | Characteristics |
|---|---|
github | Empty GOOGLE_CLIENT_ID, IS_GITHUB_BUILD=true, disabled push (no FCM), no-op GoogleAuthHelperImpl |
playstore | Actual client ID from secrets.properties, FCM push enabled, real GoogleAuthHelperImpl |
Release builds can be disabled locally:
# local.properties
devBuild=true This skips release variants via androidComponents.beforeVariants.
Release builds use minifyEnabled = true, shrinkResources = true. Key ProGuard rules:
# Keep MSAL OAuth
-keep class com.microsoft.identity.common.** { *; }
# Keep SQLCipher
-keep class net.zetetic.database.sqlcipher.** { *; }
# Keep Jakarta Mail
-keep class org.eclipse.angus.mail.** { *; }
-keep class jakarta.mail.** { *; }
-keep class jakarta.activation.** { *; }
# Keep PGPainless / Bouncy Castle
-keep class org.pgpainless.** { *; }
-keep class org.bouncycastle.** { *; }
# Keep data classes (Gson serialization)
-keep class com.shrivatsav.monomail.core.data.auth.UserProfile { *; }
-keep class com.shrivatsav.monomail.core.network.provider.imap.ImapAccountConfig { *; }
-keep class com.shrivatsav.monomail.core.database.local.ScheduledMessageEntity { *; }
-keep class com.shrivatsav.monomail.data.model.EmailAttachment { *; }
-keep class com.shrivatsav.monomail.data.model.EmailAttachmentInfo { *; }
-keep class com.shrivatsav.monomail.core.database.local.PendingActionEntity { *; }