build.gradle.kts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  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 org.mjdev.gradle.extensions.implementation
  9. import org.mjdev.gradle.extensions.kapt
  10. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.javaVersion
  11. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.kotlinCompilerExtVersion
  12. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.loadKeyStoreProperties
  13. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.projectCompileSdk
  14. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.projectMinSdk
  15. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.versionCode
  16. import org.mjdev.gradle.plugin.MainAppPlugin.Companion.versionName
  17. @Suppress("PropertyName")
  18. val CONFIG_KEYSTORE_PROPERTIES_FILE = "config/keystore.properties"
  19. @Suppress("PropertyName")
  20. val SIGNING_CONFIG_NAME = "Any"
  21. plugins {
  22. id("com.android.application")
  23. kotlin("android")
  24. id("kotlin-parcelize")
  25. id("com.google.dagger.hilt.android")
  26. id("dagger.hilt.android.plugin")
  27. id("io.objectbox")
  28. id("MainAppPlugin")
  29. kotlin("kapt")
  30. id("com.google.devtools.ksp")
  31. // id("org.jetbrains.dokka") version "1.8.10"
  32. // id ("app.cash.paparazzi") version "1.3.1"
  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("String", "IPTV_API_URL", "\"https://iptv-org.github.io/api/\"")
  57. buildConfigField("String", "GITHUB_USER", "\"mimoccc\"")
  58. buildConfigField("String", "GITHUB_REPOSITORY", "\"tvapp\"")
  59. multiDexEnabled = true
  60. manifestPlaceholders.apply {
  61. put("auth0Domain", "@string/com_auth0_domain")
  62. put("auth0Scheme", "demo")
  63. }
  64. }
  65. buildTypes {
  66. debug {
  67. applicationIdSuffix = ".debug"
  68. isDebuggable = true
  69. isMinifyEnabled = false
  70. isShrinkResources = false
  71. isCrunchPngs = false
  72. isEmbedMicroApp = true
  73. proguardFiles(
  74. getDefaultProguardFile("proguard-android-optimize.txt"),
  75. "proguard-rules.pro"
  76. )
  77. buildConfigField(
  78. "String",
  79. "SYNC_AUTH",
  80. "\"${defaultConfig.applicationId}$applicationIdSuffix.sync\""
  81. )
  82. resValue(
  83. "string",
  84. "sync_auth",
  85. "${defaultConfig.applicationId}$applicationIdSuffix.sync"
  86. )
  87. resValue(
  88. "string",
  89. "app_name",
  90. "TV ${applicationIdSuffix.toString().replace(".","").capitalize()}"
  91. )
  92. }
  93. release {
  94. applicationIdSuffix = ""
  95. isDebuggable = false
  96. isMinifyEnabled = true
  97. isShrinkResources = true
  98. isCrunchPngs = true
  99. isEmbedMicroApp = true
  100. proguardFiles(
  101. getDefaultProguardFile("proguard-android-optimize.txt"),
  102. "proguard-rules.pro"
  103. )
  104. buildConfigField(
  105. "String",
  106. "SYNC_AUTH",
  107. "\"${defaultConfig.applicationId}$applicationIdSuffix.sync\""
  108. )
  109. resValue(
  110. "string",
  111. "sync_auth",
  112. "${defaultConfig.applicationId}$applicationIdSuffix.sync"
  113. )
  114. resValue(
  115. "string",
  116. "app_name",
  117. "TV ${applicationIdSuffix.toString().replace(".","").capitalize()}"
  118. )
  119. }
  120. create("recomposing") {
  121. applicationIdSuffix = ".rcmps"
  122. isDebuggable = true
  123. isMinifyEnabled = false
  124. isShrinkResources = false
  125. isCrunchPngs = false
  126. isEmbedMicroApp = true
  127. proguardFiles(
  128. getDefaultProguardFile("proguard-android-optimize.txt"),
  129. "proguard-rules.pro"
  130. )
  131. buildConfigField(
  132. "String",
  133. "SYNC_AUTH",
  134. "\"${defaultConfig.applicationId}$applicationIdSuffix.sync\""
  135. )
  136. resValue(
  137. "string",
  138. "sync_auth",
  139. "${defaultConfig.applicationId}$applicationIdSuffix.sync"
  140. )
  141. resValue(
  142. "string",
  143. "app_name",
  144. "TV ${applicationIdSuffix.toString().replace(".","").capitalize()}"
  145. )
  146. matchingFallbacks += listOf("debug")
  147. }
  148. }
  149. buildFeatures {
  150. compose = true
  151. buildConfig = true
  152. }
  153. compileOptions {
  154. sourceCompatibility = javaVersion
  155. targetCompatibility = javaVersion
  156. }
  157. kotlinOptions {
  158. jvmTarget = javaVersion.toString()
  159. }
  160. composeOptions {
  161. kotlinCompilerExtensionVersion = kotlinCompilerExtVersion
  162. }
  163. packaging {
  164. resources.excludes.apply {
  165. add("/META-INF/{AL2.0,LGPL2.1}")
  166. add("/META-INF/DEPENDENCIES")
  167. add("/mozilla/public-suffix-list.txt")
  168. }
  169. }
  170. lint {
  171. checkReleaseBuilds = false
  172. }
  173. hilt {
  174. enableAggregatingTask = true
  175. }
  176. // subprojects {
  177. // apply(plugin = "org.jetbrains.dokka")
  178. // }
  179. // tasks.dokkaGfm {
  180. // outputDirectory.set(File(projectDir, "../wiki/documentation"))
  181. // }
  182. }
  183. dependencies {
  184. // todo remove
  185. implementation("org.jetbrains.kotlin:kotlin-reflect:1.9.21")
  186. // startups
  187. // implementation("androidx.startup:startup-runtime:1.1.1")
  188. // tv library by mjde milan jurkulak
  189. implementation(project(mapOf("path" to ":tvlib")))
  190. // base libs
  191. implementation("androidx.core:core-ktx:1.12.0")
  192. implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3")
  193. // compose base libs
  194. implementation(platform("androidx.compose:compose-bom:2023.10.01"))
  195. implementation("androidx.compose.ui:ui-tooling")
  196. implementation("androidx.activity:activity-compose:1.8.1")
  197. // more icons
  198. implementation("androidx.compose.material:material-icons-extended:1.5.4")
  199. // tv compose
  200. implementation("androidx.tv:tv-foundation:1.0.0-alpha10")
  201. implementation("androidx.tv:tv-material:1.0.0-alpha10")
  202. // dagger - hilt
  203. implementation("com.google.dagger:dagger-android:2.49")
  204. implementation("com.google.dagger:dagger-android-support:2.49")
  205. implementation("com.google.dagger:dagger:2.49")
  206. implementation("com.google.dagger:hilt-android:2.49")
  207. implementation("androidx.hilt:hilt-navigation-compose:1.1.0")
  208. // moshi json
  209. implementation("com.squareup.moshi:moshi:1.15.0")
  210. implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
  211. // okhttp
  212. implementation(platform("com.squareup.okhttp3:okhttp-bom:5.0.0-alpha.11"))
  213. implementation("com.squareup.okhttp3:okhttp")
  214. implementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.11")
  215. // debug
  216. implementation("com.jakewharton.timber:timber:5.0.1")
  217. implementation("com.android.volley:volley:1.2.1")
  218. // kapt
  219. kapt("com.google.dagger:dagger-compiler:2.49")
  220. kapt("com.google.dagger:dagger-android-processor:2.49")
  221. kapt("com.google.dagger:hilt-compiler:2.49")
  222. ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")
  223. // view model
  224. implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2")
  225. // navigation
  226. implementation("androidx.navigation:navigation-compose:2.7.5")
  227. // retrofit
  228. implementation("com.squareup.retrofit2:retrofit:2.9.0")
  229. implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
  230. implementation("com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2")
  231. // sandwich
  232. implementation("com.github.skydoves:sandwich:2.0.4")
  233. implementation("com.github.skydoves:sandwich-retrofit:2.0.4")
  234. // encrypt data
  235. implementation("com.scottyab:aescrypt:0.0.1")
  236. // permission
  237. implementation("com.google.accompanist:accompanist-permissions:0.33.2-alpha")
  238. // previews
  239. debugImplementation("androidx.customview:customview-poolingcontainer:1.0.0")
  240. // lottie
  241. implementation("com.airbnb.android:lottie-compose:6.2.0")
  242. // widgets
  243. implementation("androidx.glance:glance-appwidget:1.0.0")
  244. implementation("androidx.glance:glance-material:1.0.0")
  245. implementation("androidx.glance:glance-material3:1.0.0")
  246. // fix duplicates
  247. implementation("androidx.work:work-runtime-ktx:2.9.0")
  248. // image loading
  249. implementation("com.github.bumptech.glide:okhttp3-integration:4.16.0")
  250. implementation("com.github.bumptech.glide:compose:1.0.0-beta01")
  251. implementation("com.github.skydoves:landscapist-glide:2.2.12")
  252. implementation("com.github.skydoves:landscapist-transformation:2.2.12")
  253. implementation("com.github.skydoves:landscapist-palette:2.2.12")
  254. implementation("com.github.skydoves:landscapist-placeholder:2.2.12")
  255. ksp("com.github.bumptech.glide:ksp:4.15.1")
  256. // exoplayer
  257. implementation("androidx.media3:media3-exoplayer:1.2.0")
  258. implementation("androidx.media3:media3-exoplayer-dash:1.2.0")
  259. implementation("androidx.media3:media3-exoplayer-hls:1.2.0")
  260. implementation("androidx.media3:media3-exoplayer-rtsp:1.2.0")
  261. implementation("androidx.media3:media3-datasource-cronet:1.2.0")
  262. implementation("androidx.media3:media3-datasource-okhttp:1.2.0")
  263. implementation("androidx.media3:media3-datasource-rtmp:1.2.0")
  264. implementation("androidx.media3:media3-ui:1.2.0")
  265. implementation("androidx.media3:media3-session:1.2.0")
  266. implementation("androidx.media3:media3-extractor:1.2.0")
  267. implementation("androidx.media3:media3-cast:1.2.0")
  268. implementation("androidx.media3:media3-exoplayer-workmanager:1.2.0")
  269. implementation("androidx.media3:media3-transformer:1.2.0")
  270. implementation("androidx.media3:media3-database:1.2.0")
  271. implementation("androidx.media3:media3-decoder:1.2.0")
  272. implementation("androidx.media3:media3-datasource:1.2.0")
  273. implementation("androidx.media3:media3-common:1.2.0")
  274. // libs mismatch
  275. constraints {
  276. implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0").apply {
  277. because("kotlin-stdlib-jdk7 is now a part of kotlin-stdlib")
  278. }
  279. implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.0").apply {
  280. because("kotlin-stdlib-jdk8 is now a part of kotlin-stdlib")
  281. }
  282. }
  283. // fix duplicates
  284. @Suppress("UnstableApiUsage")
  285. configurations {
  286. all {
  287. resolutionStrategy {
  288. force("androidx.work:work-runtime-ktx:2.8.1")
  289. }
  290. }
  291. }
  292. }