build.gradle.kts 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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. @file:Suppress("UnstableApiUsage")
  9. import org.mjdev.gradle.extensions.implementation
  10. import org.mjdev.gradle.extensions.kapt
  11. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.javaVersion
  12. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.kotlinCompilerExtVersion
  13. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.loadKeyStoreProperties
  14. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.projectCompileSdk
  15. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.projectMinSdk
  16. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.versionCode
  17. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.versionName
  18. @Suppress("PropertyName")
  19. val CONFIG_KEYSTORE_PROPERTIES_FILE = "config/keystore.properties"
  20. @Suppress("PropertyName")
  21. val SIGNING_CONFIG_NAME = "Any"
  22. plugins {
  23. id("com.android.application")
  24. kotlin("android")
  25. id("kotlin-parcelize")
  26. id("com.google.dagger.hilt.android")
  27. id("dagger.hilt.android.plugin")
  28. id("io.objectbox")
  29. id("MainAppPlugin")
  30. kotlin("kapt")
  31. id("com.google.devtools.ksp")
  32. // id("org.jetbrains.dokka") version "1.8.10"
  33. }
  34. android {
  35. namespace = "org.mjdev.tvapp"
  36. compileSdk = projectCompileSdk
  37. signingConfigs {
  38. loadKeyStoreProperties(
  39. CONFIG_KEYSTORE_PROPERTIES_FILE
  40. ) { aliasKey, passwordKey, fileStore, passwordStore ->
  41. create(SIGNING_CONFIG_NAME) {
  42. keyAlias = aliasKey
  43. keyPassword = passwordKey
  44. storeFile = fileStore
  45. storePassword = passwordStore
  46. }
  47. }
  48. }
  49. defaultConfig {
  50. applicationId = "org.mjdev.tvapp"
  51. minSdk = projectMinSdk
  52. targetSdk = projectCompileSdk
  53. versionCode = project.versionCode
  54. versionName = project.versionName
  55. signingConfig = signingConfigs[SIGNING_CONFIG_NAME]
  56. buildConfigField("Boolean", "IS_COMPOSE_DEBUG", "false")
  57. buildConfigField(
  58. "String",
  59. "IPTV_API_URL",
  60. "\"https://iptv-org.github.io/api/\""
  61. )
  62. buildConfigField(
  63. "String",
  64. "GITHUB_USER",
  65. "\"mimoccc\""
  66. )
  67. buildConfigField(
  68. "String",
  69. "GITHUB_REPOSITORY",
  70. "\"tvapp\""
  71. )
  72. manifestPlaceholders.apply {
  73. put("auth0Domain", "@string/com_auth0_domain")
  74. put("auth0Scheme", "demo")
  75. }
  76. }
  77. buildTypes {
  78. debug {
  79. applicationIdSuffix = ".debug"
  80. isDebuggable = true
  81. isMinifyEnabled = false
  82. proguardFiles(
  83. getDefaultProguardFile("proguard-android-optimize.txt"),
  84. "proguard-rules.pro"
  85. )
  86. buildConfigField("Boolean", "DEBUG_RECOMPOSE", "false")
  87. buildConfigField(
  88. "String",
  89. "SYNC_AUTH",
  90. "\"${defaultConfig.applicationId}${applicationIdSuffix}.sync\""
  91. )
  92. resValue(
  93. "string",
  94. "sync_auth",
  95. "${defaultConfig.applicationId}${applicationIdSuffix}.sync"
  96. )
  97. }
  98. release {
  99. applicationIdSuffix = ""
  100. isDebuggable = true
  101. isMinifyEnabled = false
  102. proguardFiles(
  103. getDefaultProguardFile("proguard-android-optimize.txt"),
  104. "proguard-rules.pro"
  105. )
  106. buildConfigField("Boolean", "DEBUG_RECOMPOSE", "false")
  107. buildConfigField(
  108. "String",
  109. "SYNC_AUTH",
  110. "\"${defaultConfig.applicationId}${applicationIdSuffix}.sync\""
  111. )
  112. resValue(
  113. "string",
  114. "sync_auth",
  115. "${defaultConfig.applicationId}${applicationIdSuffix}.sync"
  116. )
  117. }
  118. create("recomposing") {
  119. applicationIdSuffix = ".rcmps"
  120. isDebuggable = true
  121. isMinifyEnabled = false
  122. proguardFiles(
  123. getDefaultProguardFile("proguard-android-optimize.txt"),
  124. "proguard-rules.pro"
  125. )
  126. buildConfigField("Boolean", "DEBUG_RECOMPOSE", "true")
  127. buildConfigField(
  128. "String",
  129. "SYNC_AUTH",
  130. "\"${defaultConfig.applicationId}${applicationIdSuffix}.sync\""
  131. )
  132. resValue(
  133. "string",
  134. "sync_auth",
  135. "${defaultConfig.applicationId}${applicationIdSuffix}.sync"
  136. )
  137. multiDexEnabled = true
  138. matchingFallbacks += listOf("debug")
  139. }
  140. }
  141. buildFeatures {
  142. compose = true
  143. buildConfig = true
  144. }
  145. compileOptions {
  146. sourceCompatibility = javaVersion
  147. targetCompatibility = javaVersion
  148. }
  149. kotlinOptions {
  150. jvmTarget = javaVersion.toString()
  151. }
  152. composeOptions {
  153. kotlinCompilerExtensionVersion = kotlinCompilerExtVersion
  154. }
  155. packaging {
  156. resources.excludes.add("/META-INF/{AL2.0,LGPL2.1}")
  157. }
  158. lint {
  159. checkReleaseBuilds = false
  160. }
  161. hilt {
  162. enableAggregatingTask = true
  163. }
  164. // subprojects {
  165. // apply(plugin = "org.jetbrains.dokka")
  166. // }
  167. // tasks.dokkaGfm {
  168. // outputDirectory.set(File(projectDir, "../wiki/documentation"))
  169. // }
  170. }
  171. dependencies {
  172. // tv library by mjde milan jurkulak
  173. implementation(project(mapOf("path" to ":tvlib")))
  174. // base libs
  175. implementation("androidx.core:core-ktx:1.12.0-rc01")
  176. implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
  177. // compose base libs
  178. implementation(platform("androidx.compose:compose-bom:2023.06.01"))
  179. implementation("androidx.compose.ui:ui-tooling")
  180. implementation("androidx.activity:activity-compose:1.7.2")
  181. // more icons
  182. implementation("androidx.compose.material:material-icons-extended:1.5.0")
  183. // tv compose
  184. implementation("androidx.tv:tv-foundation:1.0.0-alpha08")
  185. implementation("androidx.tv:tv-material:1.0.0-alpha08")
  186. // dagger - hilt
  187. implementation("com.google.dagger:dagger-android:2.47")
  188. implementation("com.google.dagger:dagger-android-support:2.47")
  189. implementation("com.google.dagger:dagger:2.47")
  190. implementation("com.google.dagger:hilt-android:2.47")
  191. implementation("androidx.hilt:hilt-navigation-compose:1.1.0-alpha01")
  192. // moshi json
  193. implementation("com.squareup.moshi:moshi:1.15.0")
  194. implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
  195. // okhttp
  196. implementation(platform("com.squareup.okhttp3:okhttp-bom:5.0.0-alpha.11"))
  197. implementation("com.squareup.okhttp3:okhttp")
  198. implementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.11")
  199. // debug
  200. implementation("com.jakewharton.timber:timber:5.0.1")
  201. // kapt
  202. kapt("com.google.dagger:dagger-compiler:2.47")
  203. kapt("com.google.dagger:dagger-android-processor:2.47")
  204. kapt("com.google.dagger:hilt-compiler:2.47")
  205. ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")
  206. // view model
  207. implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
  208. // navigation
  209. implementation("androidx.navigation:navigation-compose:2.7.0")
  210. // retrofit
  211. implementation("com.squareup.retrofit2:retrofit:2.9.0")
  212. implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
  213. implementation("com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2")
  214. // sandwich
  215. implementation("com.github.skydoves:sandwich:1.3.8")
  216. // encrypt data
  217. implementation("com.scottyab:aescrypt:0.0.1")
  218. // permission
  219. implementation("com.google.accompanist:accompanist-permissions:0.33.0-alpha")
  220. // previews
  221. debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0")
  222. // lottie
  223. implementation("com.airbnb.android:lottie-compose:6.1.0")
  224. // oauth
  225. implementation("com.auth0.android:auth0:2.10.1")
  226. implementation("com.auth0.android:jwtdecode:2.0.2")
  227. // widgets
  228. implementation("androidx.glance:glance-appwidget:1.0.0-rc01")
  229. implementation("androidx.glance:glance-material:1.0.0-rc01")
  230. implementation("androidx.glance:glance-material3:1.0.0-rc01")
  231. // fix duplicates
  232. implementation("androidx.work:work-runtime-ktx:2.8.1")
  233. // exoplayer
  234. implementation("androidx.media3:media3-exoplayer:1.1.0")
  235. implementation("androidx.media3:media3-exoplayer-dash:1.1.0")
  236. implementation("androidx.media3:media3-exoplayer-hls:1.1.0")
  237. implementation("androidx.media3:media3-exoplayer-rtsp:1.1.0")
  238. // implementation("androidx.media3:media3-exoplayer-ima:1.1.0")
  239. implementation("androidx.media3:media3-datasource-cronet:1.1.0")
  240. implementation("androidx.media3:media3-datasource-okhttp:1.1.0")
  241. implementation("androidx.media3:media3-datasource-rtmp:1.1.0")
  242. implementation("androidx.media3:media3-ui:1.1.0")
  243. // implementation("androidx.media3:media3-ui-leanback:1.1.0")
  244. implementation("androidx.media3:media3-session:1.1.0")
  245. implementation("androidx.media3:media3-extractor:1.1.0")
  246. implementation("androidx.media3:media3-cast:1.1.0")
  247. implementation("androidx.media3:media3-exoplayer-workmanager:1.1.0")
  248. implementation("androidx.media3:media3-transformer:1.1.0")
  249. implementation("androidx.media3:media3-database:1.1.0")
  250. implementation("androidx.media3:media3-decoder:1.1.0")
  251. implementation("androidx.media3:media3-datasource:1.1.0")
  252. implementation("androidx.media3:media3-common:1.1.0")
  253. // libs mismatch
  254. constraints {
  255. implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0")?.apply {
  256. because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
  257. }
  258. implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0")?.apply {
  259. because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
  260. }
  261. }
  262. // fix duplicates
  263. configurations {
  264. all {
  265. resolutionStrategy {
  266. force("androidx.work:work-runtime-ktx:2.8.1")
  267. }
  268. }
  269. }
  270. }