LibPlugin.kt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. /*
  2. * Copyright (c) Milan Jurkulák 2024.
  3. * Contact:
  4. * e: mimoccc@gmail.com
  5. * e: mj@mjdev.org
  6. * w: https://mjdev.org
  7. */
  8. package org.mjdev.gradle.plugin
  9. import com.android.build.api.dsl.LibraryExtension
  10. import io.gitlab.arturbosch.detekt.DetektPlugin
  11. import io.gitlab.arturbosch.detekt.extensions.DetektExtension
  12. import org.gradle.api.JavaVersion
  13. import org.gradle.api.Project
  14. import org.gradle.api.artifacts.dsl.LockMode
  15. import org.gradle.kotlin.dsl.apply
  16. import org.gradle.kotlin.dsl.configure
  17. import org.gradle.kotlin.dsl.dependencies
  18. import org.jetbrains.dokka.Platform
  19. import org.jmailen.gradle.kotlinter.KotlinterExtension
  20. import org.jmailen.gradle.kotlinter.KotlinterPlugin
  21. import org.mjdev.gradle.base.BasePlugin
  22. import org.mjdev.gradle.plugin.config.LibConfig
  23. import org.mjdev.gradle.extensions.asInt
  24. import org.mjdev.gradle.extensions.runAfterAssembleTask
  25. import org.mjdev.gradle.extensions.extension
  26. import org.mjdev.gradle.extensions.libs
  27. import org.mjdev.gradle.extensions.implementation
  28. import org.mjdev.gradle.extensions.debugImplementation
  29. import org.mjdev.gradle.extensions.kapt
  30. import org.mjdev.gradle.extensions.testImplementation
  31. import org.mjdev.gradle.extensions.androidTestImplementation
  32. import org.mjdev.gradle.extensions.ksp
  33. import org.mjdev.gradle.extensions.kotlinCompileOptions
  34. import org.mjdev.gradle.extensions.detektTask
  35. import org.mjdev.gradle.extensions.dokkaTask
  36. import org.mjdev.gradle.extensions.apply
  37. import org.mjdev.gradle.extensions.int
  38. import org.mjdev.gradle.extensions.string
  39. import org.mjdev.gradle.extensions.projectName
  40. import org.mjdev.gradle.extensions.runConfigured
  41. @Suppress("UnstableApiUsage")
  42. class LibPlugin : BasePlugin() {
  43. private val configFieldName = "libConfig"
  44. override fun Project.work() {
  45. val libConfig = extension<LibConfig>(configFieldName)
  46. apply(plugin = "kotlin-android")
  47. apply(plugin = "com.android.library")
  48. apply(plugin = "kotlin-kapt")
  49. apply(plugin = "kotlin-parcelize")
  50. apply(plugin = "com.google.devtools.ksp")
  51. apply(plugin = "com.google.dagger.hilt.android")
  52. apply(plugin = "dagger.hilt.android.plugin")
  53. apply(plugin = "io.objectbox")
  54. apply("org.jetbrains.dokka")
  55. apply(DetektPlugin::class)
  56. apply(KotlinterPlugin::class)
  57. configure<LibraryExtension> {
  58. // todo : move
  59. namespace = libs.versions.lib.namespace.string
  60. // todo : move
  61. compileSdk = libs.versions.compileSdk.int
  62. compileOptions {
  63. // todo : move
  64. sourceCompatibility = libConfig.javaVersion
  65. // todo : move
  66. targetCompatibility = libConfig.javaVersion
  67. }
  68. buildFeatures {
  69. compose = true
  70. buildConfig = true
  71. }
  72. composeOptions {
  73. // todo : move
  74. kotlinCompilerExtensionVersion = libs.versions.kotlin.compiler.version.string
  75. }
  76. defaultConfig {
  77. // todo : move
  78. minSdk = libs.versions.minSdk.int
  79. testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  80. }
  81. packaging {
  82. resources {
  83. excludes.addAll(libConfig.projectExcludes)
  84. }
  85. }
  86. buildTypes {
  87. debug {
  88. isMinifyEnabled = false
  89. isShrinkResources = false
  90. proguardFiles(
  91. getDefaultProguardFile(libConfig.projectProguardFile),
  92. libConfig.projectProguardRulesFile
  93. )
  94. }
  95. release {
  96. // todo minify
  97. isMinifyEnabled = false
  98. isShrinkResources = false
  99. proguardFiles(
  100. getDefaultProguardFile(libConfig.projectProguardFile),
  101. libConfig.projectProguardRulesFile
  102. )
  103. }
  104. }
  105. sourceSets {
  106. getByName("main") {
  107. jniLibs.srcDirs()
  108. }
  109. }
  110. lint {
  111. checkAllWarnings = true
  112. showAll = true
  113. explainIssues = true
  114. // todo : move
  115. abortOnError = false
  116. // todo : move
  117. warningsAsErrors = false
  118. disable += "UnusedIds"
  119. }
  120. testOptions {
  121. unitTests.isReturnDefaultValues = true
  122. }
  123. testCoverage {
  124. jacocoVersion = libs.versions.jacoco.version.string
  125. }
  126. }
  127. runConfigured<LibConfig> {
  128. kotlinCompileOptions {
  129. kotlinOptions {
  130. freeCompilerArgs += "-Xjsr305=strict"
  131. jvmTarget = javaVersion.toString()
  132. }
  133. }
  134. detektTask {
  135. if (autoCorrectCode)
  136. runAfterAssembleTask()
  137. }
  138. dokkaTask {
  139. outputDirectory.set(rootDir.resolve(documentationDir))
  140. moduleName.set(projectName)
  141. suppressObviousFunctions.set(false)
  142. dokkaSourceSets.configureEach {
  143. offlineMode.set(false)
  144. includeNonPublic.set(false)
  145. skipDeprecated.set(false)
  146. failOnWarning.set(failOnDocumentationWarning)
  147. reportUndocumented.set(reportUndocumentedFiles)
  148. skipEmptyPackages.set(false)
  149. platform.set(Platform.jvm)
  150. jdkVersion.set(javaVersion.asInt())
  151. noStdlibLink.set(false)
  152. noJdkLink.set(false)
  153. noAndroidSdkLink.set(false)
  154. }
  155. if (createDocumentation)
  156. runAfterAssembleTask()
  157. }
  158. configure<DetektExtension> {
  159. reportsDir = rootDir.resolve(codeReportsDir)
  160. ignoreFailures = ignoreCodeFailures
  161. @Suppress("DEPRECATION")
  162. config = files(project.rootDir.resolve(detectConfigFile))
  163. }
  164. configure<KotlinterExtension> {
  165. ignoreFailures = ignoreCodeFailures
  166. reporters = arrayOf("checkstyle", "plain")
  167. }
  168. }
  169. dependencyLocking {
  170. lockMode.set(LockMode.STRICT)
  171. }
  172. dependencies {
  173. // core
  174. implementation(libs.androidx.ktx)
  175. implementation(libs.kotlinx.coroutines.android)
  176. implementation(libs.kotlinx.coroutines.core)
  177. // reflect / todo : remove
  178. implementation(libs.kotlin.reflect)
  179. // window manager
  180. implementation(libs.androidx.window)
  181. // fix duplicates
  182. implementation(libs.androidx.work.runtime.ktx)
  183. // compose
  184. implementation(platform(libs.androidx.compose.bom))
  185. implementation(libs.androidx.compose.ui.tooling)
  186. implementation(libs.androidx.compose.activity)
  187. // more icons
  188. implementation(libs.androidx.material.icons.extended)
  189. // tv compose
  190. implementation(libs.androidx.tv.foundation)
  191. implementation(libs.androidx.tv.material)
  192. // view model
  193. implementation(libs.androidx.compose.lifecycle.viewmodel)
  194. // navigation
  195. implementation(libs.androidx.compose.navigation)
  196. // todo remove, dynamic background & colors
  197. implementation(libs.androidx.material3)
  198. // previews
  199. debugImplementation(libs.androidx.customview.poolingcontainer)
  200. // foundation
  201. implementation(libs.androidx.foundation)
  202. // dagger
  203. implementation(libs.dagger)
  204. // dagger android
  205. implementation(libs.dagger.android)
  206. implementation(libs.dagger.android.support)
  207. // dagger hilt
  208. implementation(libs.dagger.hilt.android)
  209. implementation(libs.androidx.compose.hilt.navigation)
  210. kapt(libs.dagger.compiler)
  211. kapt(libs.dagger.android.processor)
  212. kapt(libs.dagger.hilt.compiler)
  213. // moshi
  214. implementation(libs.moshi)
  215. implementation(libs.moshi.retrofit.converter)
  216. ksp(libs.moshi.kotlin.codegen)
  217. // okhttp
  218. implementation(platform(libs.okhttp3.bom))
  219. implementation(libs.okhttp3)
  220. implementation(libs.okhttp3.logging.interceptor)
  221. // timber
  222. implementation(libs.timber)
  223. // retrofit
  224. implementation(libs.retrofit)
  225. implementation(libs.retrofit2.kotlin.coroutines.adapter)
  226. // sandwich
  227. implementation(libs.sandwich)
  228. implementation(libs.sandwich.retrofit)
  229. // glide
  230. implementation(libs.glide.okhttp3.integration)
  231. implementation(libs.glide.compose)
  232. ksp(libs.glide.ksp)
  233. // landscapist
  234. implementation(libs.landscapist.glide)
  235. implementation(libs.landscapist.transformation)
  236. implementation(libs.landscapist.palette)
  237. implementation(libs.landscapist.placeholder)
  238. // exif
  239. implementation(libs.androidx.exifinterface)
  240. // exoPlayer
  241. implementation(libs.androidx.media3.exoplayer)
  242. implementation(libs.androidx.media3.exoplayer.dash)
  243. implementation(libs.androidx.media3.exoplayer.hls)
  244. implementation(libs.androidx.media3.exoplayer.rtsp)
  245. implementation(libs.androidx.media3.datasource.cronet)
  246. implementation(libs.androidx.media3.datasource.okhttp)
  247. implementation(libs.androidx.media3.datasource.rtmp)
  248. implementation(libs.androidx.media3.ui)
  249. implementation(libs.androidx.media3.session)
  250. implementation(libs.androidx.media3.extractor)
  251. implementation(libs.androidx.media3.cast)
  252. implementation(libs.androidx.media3.exoplayer.workmanager)
  253. implementation(libs.androidx.media3.transformer)
  254. implementation(libs.androidx.media3.database)
  255. implementation(libs.androidx.media3.decoder)
  256. implementation(libs.androidx.media3.datasource)
  257. implementation(libs.androidx.media3.common)
  258. implementation(libs.androidx.media3.exoplayer.ima)
  259. implementation(libs.androidx.media3.ui.leanback)
  260. // encrypt
  261. implementation(libs.aescrypt)
  262. // permission
  263. implementation(libs.accompanist.permissions)
  264. // zxing
  265. implementation(libs.zxing.core)
  266. // svg
  267. implementation(libs.androidsvg.aar)
  268. // pallette
  269. implementation(libs.androidx.palette.ktx)
  270. // lottie
  271. implementation(libs.compose.lottie)
  272. // jsoup
  273. implementation(libs.jsoup)
  274. // dm
  275. implementation(libs.dailymotion.sdk.android)
  276. // dynamic theme
  277. implementation(libs.android.material)
  278. // widget
  279. implementation(libs.androidx.glance.appwidget)
  280. implementation(libs.androidx.glance.material)
  281. implementation(libs.androidx.glance.material3)
  282. // test
  283. testImplementation(libs.junit)
  284. androidTestImplementation(libs.androidx.junit)
  285. androidTestImplementation(libs.androidx.espresso.core)
  286. // anr
  287. implementation(libs.anrwatchdog)
  288. // oauth
  289. implementation(libs.auth0)
  290. implementation(libs.android.jwtdecode)
  291. }
  292. }
  293. }