build.gradle.kts 4.6 KB

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