build.gradle.kts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /*
  2. * Copyright (c) Milan Jurkulák 2023.
  3. * Contact:
  4. * e: mimoccc@gmail.com
  5. * e: mj@mjdev.org
  6. * w: https://mjdev.org
  7. */
  8. import com.android.build.gradle.internal.api.BaseVariantOutputImpl
  9. import org.mjdev.gradle.dependency.anotherDependencies
  10. import org.mjdev.gradle.dependency.baseDependencies
  11. import org.mjdev.gradle.dependency.composeDependencies
  12. import org.mjdev.gradle.dependency.daggerDependencies
  13. import org.mjdev.gradle.dependency.encryptDependencies
  14. import org.mjdev.gradle.dependency.exoPlayerDependencies
  15. import org.mjdev.gradle.dependency.glideDependencies
  16. import org.mjdev.gradle.dependency.mjdevTvLib
  17. import org.mjdev.gradle.dependency.moshiDependencies
  18. import org.mjdev.gradle.dependency.okHttpDependencies
  19. import org.mjdev.gradle.dependency.permissionsDependencies
  20. import org.mjdev.gradle.dependency.retrofitDependencies
  21. import org.mjdev.gradle.dependency.sandwichDependencies
  22. import org.mjdev.gradle.dependency.testDependencies
  23. import org.mjdev.gradle.dependency.timberDependencies
  24. import org.mjdev.gradle.dependency.widgetDependencies
  25. import org.mjdev.gradle.extensions.buildConfigString
  26. import org.mjdev.gradle.extensions.loadKeyStoreProperties
  27. import org.mjdev.gradle.extensions.manifestPlaceholders
  28. import org.mjdev.gradle.extensions.stringRes
  29. import org.mjdev.gradle.extensions.suffixToString
  30. import org.mjdev.gradle.extensions.versionCode
  31. import org.mjdev.gradle.extensions.versionName
  32. import org.mjdev.gradle.plugin.javaVersion
  33. import org.mjdev.gradle.plugin.kotlinCompilerExtVersion
  34. import org.mjdev.gradle.plugin.projectCompileSdk
  35. import org.mjdev.gradle.plugin.projectMinSdk
  36. @Suppress("PropertyName")
  37. val CONFIG_KEYSTORE_PROPERTIES_FILE = "config/keystore.properties"
  38. @Suppress("PropertyName")
  39. val SIGNING_CONFIG_NAME = "Any"
  40. plugins {
  41. // kotlinAndroid()
  42. // kotlinKapt()
  43. // kotlinParcelize()
  44. // androidApplication()
  45. // hilt()
  46. // ksp()
  47. // mainAppPlugin()
  48. // objectBox()
  49. kotlin("android")
  50. kotlin("kapt")
  51. id("com.android.application")
  52. id("kotlin-parcelize")
  53. id("com.google.dagger.hilt.android")
  54. id("dagger.hilt.android.plugin")
  55. id("com.google.devtools.ksp")
  56. // id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
  57. // id ("app.cash.paparazzi") version "1.3.1"
  58. // id("DependencyUpdatePlugin")
  59. // id("AndroidCoreLibraryPlugin")
  60. id("MainAppPlugin")
  61. id("io.objectbox")
  62. }
  63. android {
  64. namespace = "org.mjdev.tvapp"
  65. compileSdk = projectCompileSdk
  66. signingConfigs {
  67. loadKeyStoreProperties(
  68. CONFIG_KEYSTORE_PROPERTIES_FILE
  69. ) { aliasKey, passwordKey, fileStore, passwordStore ->
  70. create(SIGNING_CONFIG_NAME) {
  71. keyAlias = aliasKey
  72. keyPassword = passwordKey
  73. storeFile = fileStore
  74. storePassword = passwordStore
  75. }
  76. }
  77. }
  78. defaultConfig {
  79. applicationId = "org.mjdev.tvapp"
  80. minSdk = projectMinSdk
  81. targetSdk = projectCompileSdk
  82. versionCode = project.versionCode
  83. versionName = project.versionName
  84. signingConfig = signingConfigs[SIGNING_CONFIG_NAME]
  85. buildConfigString(
  86. "IPTV_API_URL" to "https://iptv-org.github.io/api/",
  87. "GITHUB_USER" to "mimoccc",
  88. "GITHUB_REPOSITORY" to "tvapp"
  89. )
  90. multiDexEnabled = true
  91. manifestPlaceholders(
  92. "auth0Domain" to "@string/com_auth0_domain",
  93. "auth0Scheme" to "demo"
  94. )
  95. }
  96. buildTypes {
  97. debug {
  98. applicationIdSuffix = ".debug"
  99. isDebuggable = true
  100. isMinifyEnabled = false
  101. isShrinkResources = false
  102. isCrunchPngs = false
  103. isEmbedMicroApp = true
  104. proguardFiles(
  105. getDefaultProguardFile("proguard-android-optimize.txt"),
  106. "proguard-rules.pro"
  107. )
  108. buildConfigString(
  109. "SYNC_AUTH" to "${defaultConfig.applicationId}$applicationIdSuffix.sync"
  110. )
  111. stringRes(
  112. "sync_auth" to "${defaultConfig.applicationId}$applicationIdSuffix.sync",
  113. "app_name" to "TV App ${applicationIdSuffix.suffixToString()}"
  114. )
  115. }
  116. release {
  117. applicationIdSuffix = ""
  118. isDebuggable = false
  119. isMinifyEnabled = true
  120. isShrinkResources = true
  121. isCrunchPngs = true
  122. isEmbedMicroApp = true
  123. proguardFiles(
  124. getDefaultProguardFile("proguard-android-optimize.txt"),
  125. "proguard-rules.pro"
  126. )
  127. buildConfigString(
  128. "SYNC_AUTH" to "${defaultConfig.applicationId}$applicationIdSuffix.sync"
  129. )
  130. stringRes(
  131. "sync_auth" to "${defaultConfig.applicationId}$applicationIdSuffix.sync",
  132. "app_name" to "TV App ${applicationIdSuffix.suffixToString()}"
  133. )
  134. }
  135. }
  136. buildFeatures {
  137. compose = true
  138. buildConfig = true
  139. }
  140. compileOptions {
  141. sourceCompatibility = javaVersion
  142. targetCompatibility = javaVersion
  143. }
  144. kotlinOptions {
  145. jvmTarget = javaVersion.toString()
  146. }
  147. composeOptions {
  148. kotlinCompilerExtensionVersion = kotlinCompilerExtVersion
  149. }
  150. packaging {
  151. resources.excludes.apply {
  152. add("/META-INF/{AL2.0,LGPL2.1}")
  153. add("/META-INF/DEPENDENCIES")
  154. add("/mozilla/public-suffix-list.txt")
  155. }
  156. }
  157. lint {
  158. checkReleaseBuilds = false
  159. }
  160. kapt {
  161. correctErrorTypes = true
  162. }
  163. hilt {
  164. enableAggregatingTask = true
  165. }
  166. applicationVariants.all {
  167. outputs.map {
  168. it as BaseVariantOutputImpl
  169. }.forEach { output ->
  170. val outputFileName = "$applicationId-$versionName.apk"
  171. output.outputFileName = outputFileName
  172. }
  173. }
  174. tasks {
  175. dokkaGfm {
  176. outputDirectory.set(File(projectDir, "../wiki/documentation/"))
  177. }
  178. }
  179. mainAppConfig {
  180. createDocumentation = true
  181. }
  182. }
  183. dependencies {
  184. mjdevTvLib()
  185. baseDependencies()
  186. composeDependencies()
  187. daggerDependencies()
  188. moshiDependencies()
  189. okHttpDependencies()
  190. timberDependencies()
  191. retrofitDependencies()
  192. sandwichDependencies()
  193. glideDependencies()
  194. // imageIODependencies()
  195. exoPlayerDependencies()
  196. encryptDependencies()
  197. permissionsDependencies()
  198. anotherDependencies()
  199. widgetDependencies()
  200. testDependencies()
  201. }