build.gradle.kts 9.9 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. // id ("app.cash.paparazzi") version "1.3.1"
  34. }
  35. android {
  36. namespace = "org.mjdev.tvapp"
  37. compileSdk = projectCompileSdk
  38. signingConfigs {
  39. loadKeyStoreProperties(
  40. CONFIG_KEYSTORE_PROPERTIES_FILE
  41. ) { aliasKey, passwordKey, fileStore, passwordStore ->
  42. create(SIGNING_CONFIG_NAME) {
  43. keyAlias = aliasKey
  44. keyPassword = passwordKey
  45. storeFile = fileStore
  46. storePassword = passwordStore
  47. }
  48. }
  49. }
  50. defaultConfig {
  51. applicationId = "org.mjdev.tvapp"
  52. minSdk = projectMinSdk
  53. targetSdk = projectCompileSdk
  54. versionCode = project.versionCode
  55. versionName = project.versionName
  56. signingConfig = signingConfigs[SIGNING_CONFIG_NAME]
  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(
  87. "String",
  88. "SYNC_AUTH",
  89. "\"${defaultConfig.applicationId}${applicationIdSuffix}.sync\""
  90. )
  91. resValue(
  92. "string",
  93. "sync_auth",
  94. "${defaultConfig.applicationId}${applicationIdSuffix}.sync"
  95. )
  96. }
  97. release {
  98. applicationIdSuffix = ""
  99. isDebuggable = true
  100. isMinifyEnabled = false
  101. proguardFiles(
  102. getDefaultProguardFile("proguard-android-optimize.txt"),
  103. "proguard-rules.pro"
  104. )
  105. buildConfigField(
  106. "String",
  107. "SYNC_AUTH",
  108. "\"${defaultConfig.applicationId}${applicationIdSuffix}.sync\""
  109. )
  110. resValue(
  111. "string",
  112. "sync_auth",
  113. "${defaultConfig.applicationId}${applicationIdSuffix}.sync"
  114. )
  115. }
  116. create("recomposing") {
  117. applicationIdSuffix = ".rcmps"
  118. isDebuggable = true
  119. isMinifyEnabled = false
  120. proguardFiles(
  121. getDefaultProguardFile("proguard-android-optimize.txt"),
  122. "proguard-rules.pro"
  123. )
  124. buildConfigField(
  125. "String",
  126. "SYNC_AUTH",
  127. "\"${defaultConfig.applicationId}${applicationIdSuffix}.sync\""
  128. )
  129. resValue(
  130. "string",
  131. "sync_auth",
  132. "${defaultConfig.applicationId}${applicationIdSuffix}.sync"
  133. )
  134. multiDexEnabled = true
  135. matchingFallbacks += listOf("debug")
  136. }
  137. }
  138. buildFeatures {
  139. compose = true
  140. buildConfig = true
  141. }
  142. compileOptions {
  143. sourceCompatibility = javaVersion
  144. targetCompatibility = javaVersion
  145. }
  146. kotlinOptions {
  147. jvmTarget = javaVersion.toString()
  148. }
  149. composeOptions {
  150. kotlinCompilerExtensionVersion = kotlinCompilerExtVersion
  151. }
  152. packaging {
  153. resources.excludes.add("/META-INF/{AL2.0,LGPL2.1}")
  154. }
  155. lint {
  156. checkReleaseBuilds = false
  157. }
  158. hilt {
  159. enableAggregatingTask = true
  160. }
  161. // subprojects {
  162. // apply(plugin = "org.jetbrains.dokka")
  163. // }
  164. // tasks.dokkaGfm {
  165. // outputDirectory.set(File(projectDir, "../wiki/documentation"))
  166. // }
  167. }
  168. dependencies {
  169. // tv library by mjde milan jurkulak
  170. implementation(project(mapOf("path" to ":tvlib")))
  171. // base libs
  172. implementation("androidx.core:core-ktx:1.12.0")
  173. implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
  174. // compose base libs
  175. implementation(platform("androidx.compose:compose-bom:2023.09.01"))
  176. implementation("androidx.compose.ui:ui-tooling")
  177. implementation("androidx.activity:activity-compose:1.7.2")
  178. // more icons
  179. implementation("androidx.compose.material:material-icons-extended:1.5.1")
  180. // tv compose
  181. implementation("androidx.tv:tv-foundation:1.0.0-alpha09")
  182. implementation("androidx.tv:tv-material:1.0.0-alpha09")
  183. // dagger - hilt
  184. implementation("com.google.dagger:dagger-android:2.48")
  185. implementation("com.google.dagger:dagger-android-support:2.48")
  186. implementation("com.google.dagger:dagger:2.48")
  187. implementation("com.google.dagger:hilt-android:2.48")
  188. implementation("androidx.hilt:hilt-navigation-compose:1.1.0-alpha01")
  189. // moshi json
  190. implementation("com.squareup.moshi:moshi:1.15.0")
  191. implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
  192. // okhttp
  193. implementation(platform("com.squareup.okhttp3:okhttp-bom:5.0.0-alpha.11"))
  194. implementation("com.squareup.okhttp3:okhttp")
  195. implementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.11")
  196. // debug
  197. implementation("com.jakewharton.timber:timber:5.0.1")
  198. implementation("com.android.volley:volley:1.2.1")
  199. // kapt
  200. kapt("com.google.dagger:dagger-compiler:2.48")
  201. kapt("com.google.dagger:dagger-android-processor:2.48")
  202. kapt("com.google.dagger:hilt-compiler:2.48")
  203. ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")
  204. // view model
  205. implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2")
  206. // navigation
  207. implementation("androidx.navigation:navigation-compose:2.7.3")
  208. // retrofit
  209. implementation("com.squareup.retrofit2:retrofit:2.9.0")
  210. implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
  211. implementation("com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2")
  212. // sandwich
  213. implementation("com.github.skydoves:sandwich:1.3.9")
  214. // encrypt data
  215. implementation("com.scottyab:aescrypt:0.0.1")
  216. // permission
  217. implementation("com.google.accompanist:accompanist-permissions:0.33.2-alpha")
  218. // previews
  219. debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0")
  220. // lottie
  221. implementation("com.airbnb.android:lottie-compose:6.1.0")
  222. // oauth
  223. implementation("com.auth0.android:auth0:2.10.1")
  224. implementation("com.auth0.android:jwtdecode:2.0.2")
  225. // widgets
  226. implementation("androidx.glance:glance-appwidget:1.0.0")
  227. implementation("androidx.glance:glance-material:1.0.0")
  228. implementation("androidx.glance:glance-material3:1.0.0")
  229. // fix duplicates
  230. implementation("androidx.work:work-runtime-ktx:2.8.1")
  231. // exoplayer
  232. implementation("androidx.media3:media3-exoplayer:1.1.1")
  233. implementation("androidx.media3:media3-exoplayer-dash:1.1.1")
  234. implementation("androidx.media3:media3-exoplayer-hls:1.1.1")
  235. implementation("androidx.media3:media3-exoplayer-rtsp:1.1.1")
  236. // implementation("androidx.media3:media3-exoplayer-ima:1.1.0")
  237. implementation("androidx.media3:media3-datasource-cronet:1.1.1")
  238. implementation("androidx.media3:media3-datasource-okhttp:1.1.1")
  239. implementation("androidx.media3:media3-datasource-rtmp:1.1.1")
  240. implementation("androidx.media3:media3-ui:1.1.1")
  241. // implementation("androidx.media3:media3-ui-leanback:1.1.0")
  242. implementation("androidx.media3:media3-session:1.1.1")
  243. implementation("androidx.media3:media3-extractor:1.1.1")
  244. implementation("androidx.media3:media3-cast:1.1.1")
  245. implementation("androidx.media3:media3-exoplayer-workmanager:1.1.1")
  246. implementation("androidx.media3:media3-transformer:1.1.1")
  247. implementation("androidx.media3:media3-database:1.1.1")
  248. implementation("androidx.media3:media3-decoder:1.1.1")
  249. implementation("androidx.media3:media3-datasource:1.1.1")
  250. implementation("androidx.media3:media3-common:1.1.1")
  251. // images
  252. implementation("io.coil-kt:coil-base:2.4.0")
  253. implementation("com.github.skydoves:landscapist-coil:2.2.9")
  254. // libs mismatch
  255. constraints {
  256. implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0").apply {
  257. because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
  258. }
  259. implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0").apply {
  260. because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
  261. }
  262. }
  263. // fix duplicates
  264. configurations {
  265. all {
  266. resolutionStrategy {
  267. force("androidx.work:work-runtime-ktx:2.8.1")
  268. }
  269. }
  270. }
  271. }