build.gradle.kts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
  2. plugins {
  3. id("com.android.application")
  4. kotlin("android")
  5. kotlin("plugin.serialization")
  6. id("app.cash.sqldelight")
  7. id("org.sirekanyan.version-checker")
  8. }
  9. android {
  10. namespace = "org.sirekanyan.outline"
  11. compileSdk = 34
  12. defaultConfig {
  13. applicationId = "org.sirekanyan.outline"
  14. minSdk = 21
  15. targetSdk = 34
  16. versionCode = (property("appVersionCode") as String).toInt()
  17. versionName = property("appVersionName") as String
  18. archivesName.set("$applicationId-$versionName-$versionCode")
  19. vectorDrawables {
  20. useSupportLibrary = true
  21. }
  22. }
  23. buildTypes {
  24. release {
  25. isMinifyEnabled = true
  26. isShrinkResources = true
  27. proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard.pro")
  28. signingConfig = signingConfigs.create("release") {
  29. storeFile = System.getenv("SIGNING_KEYSTORE_FILE")?.let(::file)
  30. storePassword = System.getenv("SIGNING_KEYSTORE_PASSWORD")
  31. keyAlias = System.getenv("SIGNING_KEY_ALIAS")
  32. keyPassword = System.getenv("SIGNING_KEY_PASSWORD")
  33. }
  34. }
  35. }
  36. flavorDimensions += "store"
  37. productFlavors {
  38. create("fdroid") {
  39. dimension = "store"
  40. }
  41. create("play") {
  42. dimension = "store"
  43. listOf("ACRA_URI", "ACRA_LOGIN", "ACRA_PASSWORD").forEach { key ->
  44. buildConfigField("String", key, System.getenv(key)?.let { "\"$it\"" } ?: "null")
  45. }
  46. }
  47. }
  48. compileOptions {
  49. sourceCompatibility = JavaVersion.VERSION_1_8
  50. targetCompatibility = JavaVersion.VERSION_1_8
  51. }
  52. kotlinOptions {
  53. jvmTarget = "1.8"
  54. allWarningsAsErrors = true
  55. }
  56. lint {
  57. warningsAsErrors = true
  58. }
  59. buildFeatures {
  60. buildConfig = true
  61. compose = true
  62. }
  63. composeOptions {
  64. kotlinCompilerExtensionVersion = "1.5.3"
  65. }
  66. packaging {
  67. resources {
  68. excludes += "/META-INF/{AL2.0,LGPL2.1}"
  69. }
  70. }
  71. }
  72. dependencies {
  73. // compose
  74. implementation("androidx.activity:activity-compose:1.8.0")
  75. implementation("androidx.compose.material3:material3:1.1.2")
  76. // ktor
  77. // noinspection GradleDependency todo: https://youtrack.jetbrains.com/issue/KTOR-6396
  78. implementation("io.ktor:ktor-client-cio:2.3.4")
  79. // noinspection GradleDependency todo: https://youtrack.jetbrains.com/issue/KTOR-6396
  80. implementation("io.ktor:ktor-client-content-negotiation:2.3.4")
  81. // noinspection GradleDependency todo: https://youtrack.jetbrains.com/issue/KTOR-6396
  82. implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.4")
  83. implementation("org.slf4j:slf4j-simple:2.0.9")
  84. // sqldelight
  85. implementation("app.cash.sqldelight:android-driver:2.0.0")
  86. implementation("app.cash.sqldelight:coroutines-extensions:2.0.0")
  87. // crash reporting
  88. add("playImplementation", "ch.acra:acra-http:5.11.3")
  89. }
  90. versionCheckerOptions {
  91. "io.ktor" lessThan "2.3.5" // todo: https://youtrack.jetbrains.com/issue/KTOR-6396
  92. }
  93. sqldelight {
  94. databases {
  95. create("OutlineDatabase") {
  96. packageName.set("org.sirekanyan.outline.db")
  97. }
  98. }
  99. }
  100. androidComponents {
  101. onVariants { variant ->
  102. val variantName = variant.name.replaceFirstChar(Char::titlecase)
  103. val verifyTask = task("verify${variantName}Environment") {
  104. doLast {
  105. buildSet {
  106. if (variant.buildType == "release") {
  107. add("SIGNING_KEYSTORE_FILE")
  108. add("SIGNING_KEYSTORE_PASSWORD")
  109. add("SIGNING_KEY_ALIAS")
  110. add("SIGNING_KEY_PASSWORD")
  111. }
  112. if (variant.flavorName == "play") {
  113. add("ACRA_URI")
  114. add("ACRA_LOGIN")
  115. add("ACRA_PASSWORD")
  116. }
  117. }.forEach { key ->
  118. if (System.getenv(key).isNullOrEmpty()) {
  119. error("Please specify $key environment variable")
  120. }
  121. }
  122. }
  123. }
  124. afterEvaluate {
  125. tasks.getByName("assemble$variantName").dependsOn(verifyTask)
  126. }
  127. }
  128. }