build.gradle.kts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. applicationIdSuffix = ".debug"
  31. buildConfigField("boolean", "DEBUG", "true")
  32. listOf("DEBUG_SERVER1", "DEBUG_SERVER2").forEach { key ->
  33. buildConfigField("String", key, props.getProperty(key)?.let { "\"$it\"" } ?: "null")
  34. }
  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. listOf("ACRA_URI", "ACRA_LOGIN", "ACRA_PASSWORD").forEach { key ->
  56. buildConfigField("String", key, System.getenv(key)?.let { "\"$it\"" } ?: "null")
  57. }
  58. }
  59. }
  60. compileOptions {
  61. sourceCompatibility = JavaVersion.VERSION_1_8
  62. targetCompatibility = JavaVersion.VERSION_1_8
  63. }
  64. kotlinOptions {
  65. jvmTarget = "1.8"
  66. allWarningsAsErrors = true
  67. }
  68. lint {
  69. warningsAsErrors = true
  70. }
  71. buildFeatures {
  72. buildConfig = true
  73. compose = true
  74. }
  75. composeOptions {
  76. kotlinCompilerExtensionVersion = "1.5.6"
  77. }
  78. packaging {
  79. resources {
  80. excludes += "/META-INF/{AL2.0,LGPL2.1}"
  81. }
  82. }
  83. }
  84. dependencies {
  85. // compose
  86. implementation("androidx.activity:activity-compose:1.8.2")
  87. implementation("androidx.compose.material3:material3:1.1.2")
  88. // ktor
  89. implementation("io.ktor:ktor-client-okhttp:2.3.7")
  90. implementation("io.ktor:ktor-client-content-negotiation:2.3.7")
  91. implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")
  92. implementation("org.slf4j:slf4j-simple:2.0.9")
  93. // sqldelight
  94. implementation("app.cash.sqldelight:android-driver:2.0.1")
  95. implementation("app.cash.sqldelight:coroutines-extensions:2.0.1")
  96. // crash reporting
  97. add("playImplementation", "ch.acra:acra-http:5.11.3")
  98. }
  99. sqldelight {
  100. databases {
  101. create("OutlineDatabase") {
  102. packageName.set("org.sirekanyan.outline.db")
  103. schemaOutputDirectory.set(file("src/main/sqldelight/databases"))
  104. }
  105. }
  106. }
  107. androidComponents {
  108. onVariants { variant ->
  109. val variantName = variant.name.replaceFirstChar(Char::titlecase)
  110. val verifyTask = task("verify${variantName}Environment") {
  111. doLast {
  112. buildSet {
  113. if (variant.buildType == "release") {
  114. add("SIGNING_KEYSTORE_FILE")
  115. add("SIGNING_KEYSTORE_PASSWORD")
  116. add("SIGNING_KEY_ALIAS")
  117. add("SIGNING_KEY_PASSWORD")
  118. }
  119. if (variant.flavorName == "play") {
  120. add("ACRA_URI")
  121. add("ACRA_LOGIN")
  122. add("ACRA_PASSWORD")
  123. }
  124. }.forEach { key ->
  125. if (System.getenv(key).isNullOrEmpty()) {
  126. error("Please specify $key environment variable")
  127. }
  128. }
  129. }
  130. }
  131. afterEvaluate {
  132. tasks.getByName("assemble$variantName").dependsOn(verifyTask)
  133. }
  134. }
  135. }