build.gradle.kts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
  2. import java.util.Properties
  3. plugins {
  4. id("com.android.application")
  5. kotlin("android")
  6. kotlin("plugin.serialization")
  7. id("kotlin-parcelize")
  8. id("app.cash.sqldelight")
  9. id("org.sirekanyan.version-checker")
  10. }
  11. android {
  12. namespace = "org.sirekanyan.outline"
  13. compileSdk = 34
  14. defaultConfig {
  15. applicationId = "org.sirekanyan.outline"
  16. minSdk = 21
  17. targetSdk = 34
  18. versionCode = (property("appVersionCode") as String).toInt()
  19. versionName = property("appVersionName") as String
  20. archivesName.set("$applicationId-$versionName-$versionCode")
  21. vectorDrawables {
  22. useSupportLibrary = true
  23. }
  24. }
  25. buildTypes {
  26. debug {
  27. val props = Properties().also {
  28. it.load(File("debug.properties").also(File::createNewFile).inputStream())
  29. }
  30. isDebuggable = props.getProperty("DEBUGGABLE").toBoolean()
  31. applicationIdSuffix = ".debug"
  32. buildConfigField("boolean", "DEBUG", "true")
  33. val debugServers = props.getProperty("DEBUG_SERVERS", "").split('|').map { "\"$it\"" }
  34. buildConfigField("String[]", "DEBUG_SERVERS", debugServers.joinToString(",", "{", "}"))
  35. }
  36. release {
  37. isMinifyEnabled = true
  38. isShrinkResources = true
  39. proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard.pro")
  40. signingConfig = signingConfigs.create("release") {
  41. storeFile = System.getenv("SIGNING_KEYSTORE_FILE")?.let(::file)
  42. storePassword = System.getenv("SIGNING_KEYSTORE_PASSWORD")
  43. keyAlias = System.getenv("SIGNING_KEY_ALIAS")
  44. keyPassword = System.getenv("SIGNING_KEY_PASSWORD")
  45. }
  46. }
  47. }
  48. flavorDimensions += "store"
  49. productFlavors {
  50. create("fdroid") {
  51. dimension = "store"
  52. }
  53. create("play") {
  54. dimension = "store"
  55. resValue("string", "project_id", System.getenv("GOOGLE_PROJECT_ID") ?: "")
  56. resValue("string", "google_app_id", System.getenv("GOOGLE_APP_ID") ?: "")
  57. resValue("string", "google_api_key", System.getenv("GOOGLE_API_KEY") ?: "")
  58. resValue("string", "com.crashlytics.android.build_id", "1")
  59. }
  60. }
  61. compileOptions {
  62. sourceCompatibility = JavaVersion.VERSION_1_8
  63. targetCompatibility = JavaVersion.VERSION_1_8
  64. }
  65. kotlinOptions {
  66. jvmTarget = "1.8"
  67. allWarningsAsErrors = true
  68. }
  69. lint {
  70. warningsAsErrors = true
  71. }
  72. buildFeatures {
  73. buildConfig = true
  74. compose = true
  75. }
  76. composeOptions {
  77. kotlinCompilerExtensionVersion = "1.5.9"
  78. }
  79. packaging {
  80. resources {
  81. excludes += "/META-INF/{AL2.0,LGPL2.1}"
  82. }
  83. }
  84. }
  85. dependencies {
  86. // compose
  87. implementation("androidx.activity:activity-compose:1.8.2")
  88. implementation("androidx.compose.material3:material3:1.2.0")
  89. // ktor
  90. implementation("io.ktor:ktor-client-okhttp:2.3.8")
  91. implementation("io.ktor:ktor-client-content-negotiation:2.3.8")
  92. implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.8")
  93. implementation("org.slf4j:slf4j-simple:2.0.12")
  94. // sqldelight
  95. implementation("app.cash.sqldelight:android-driver:2.0.1")
  96. implementation("app.cash.sqldelight:coroutines-extensions:2.0.1")
  97. // crash reporting
  98. add("playImplementation", "com.google.firebase:firebase-crashlytics:18.6.2")
  99. }
  100. sqldelight {
  101. databases {
  102. create("OutlineDatabase") {
  103. packageName.set("org.sirekanyan.outline.db")
  104. schemaOutputDirectory.set(file("src/main/sqldelight/databases"))
  105. }
  106. }
  107. }
  108. androidComponents {
  109. onVariants { variant ->
  110. val variantName = variant.name.replaceFirstChar(Char::titlecase)
  111. val verifyTask = task("verify${variantName}Environment") {
  112. doLast {
  113. buildSet {
  114. if (variant.buildType == "release") {
  115. add("SIGNING_KEYSTORE_FILE")
  116. add("SIGNING_KEYSTORE_PASSWORD")
  117. add("SIGNING_KEY_ALIAS")
  118. add("SIGNING_KEY_PASSWORD")
  119. }
  120. if (variant.flavorName == "play") {
  121. add("GOOGLE_PROJECT_ID")
  122. add("GOOGLE_APP_ID")
  123. add("GOOGLE_API_KEY")
  124. }
  125. }.forEach { key ->
  126. if (System.getenv(key).isNullOrEmpty()) {
  127. error("Please specify $key environment variable")
  128. }
  129. }
  130. }
  131. }
  132. afterEvaluate {
  133. tasks.getByName("assemble$variantName").dependsOn(verifyTask)
  134. }
  135. }
  136. }