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.kotlin.dsl.apply
  15. import org.gradle.kotlin.dsl.configure
  16. import org.gradle.kotlin.dsl.dependencies
  17. import org.jetbrains.dokka.Platform
  18. import org.jmailen.gradle.kotlinter.KotlinterExtension
  19. import org.jmailen.gradle.kotlinter.KotlinterPlugin
  20. import org.mjdev.gradle.base.BasePlugin
  21. import org.mjdev.gradle.plugin.config.LibConfig
  22. import org.mjdev.gradle.extensions.asInt
  23. @Suppress("UnstableApiUsage")
  24. class LibPlugin : BasePlugin() {
  25. private val projectNamespace = "org.mjdev.tvlib"
  26. private val projectCompileSdk = 34
  27. private val projectMinSdk = 21
  28. private val projectJavaVersion = JavaVersion.VERSION_17
  29. private val projectKotlinCompilerVersion = "1.5.8"
  30. private val projectExcludes = listOf(
  31. "META-INF/",
  32. "/META-INF/{AL2.0,LGPL2.1}",
  33. "/META-INF/DEPENDENCIES",
  34. "/mozilla/public-suffix-list.txt",
  35. "okhttp3/",
  36. "kotlin/",
  37. "org/",
  38. ".properties",
  39. ".bin",
  40. )
  41. private val projectProguardFile = "proguard-android-optimize.txt"
  42. private val projectProguardRulesFile = "proguard-rules.pro"
  43. private val projectJacocoVersion = "0.8.8"
  44. private val projectLibVersionsFile = "gradle/libs.versions.toml"
  45. private val configFieldName = "libConfig"
  46. override fun Project.work() {
  47. loadVersionCatalog(projectLibVersionsFile)
  48. extension<LibConfig>(configFieldName)
  49. apply(plugin ="version-catalog")
  50. apply(plugin = "kotlin-android")
  51. apply(plugin = "com.android.library")
  52. apply(plugin = "kotlin-kapt")
  53. apply(plugin = "kotlin-parcelize")
  54. apply(plugin = "com.google.devtools.ksp")
  55. apply(plugin = "com.google.dagger.hilt.android")
  56. apply(plugin = "dagger.hilt.android.plugin")
  57. apply(plugin = "io.objectbox")
  58. apply(DetektPlugin::class)
  59. apply(KotlinterPlugin::class)
  60. apply("org.jetbrains.dokka")
  61. configure<LibraryExtension> {
  62. namespace = projectNamespace
  63. compileSdk = projectCompileSdk
  64. compileOptions {
  65. sourceCompatibility = projectJavaVersion
  66. targetCompatibility = projectJavaVersion
  67. }
  68. defaultConfig {
  69. minSdk = projectMinSdk
  70. testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
  71. }
  72. buildFeatures {
  73. compose = true
  74. buildConfig = true
  75. }
  76. composeOptions {
  77. kotlinCompilerExtensionVersion = projectKotlinCompilerVersion
  78. }
  79. packaging {
  80. resources {
  81. excludes.addAll(projectExcludes)
  82. }
  83. }
  84. buildTypes {
  85. debug {
  86. isMinifyEnabled = false
  87. isShrinkResources = false
  88. proguardFiles(
  89. getDefaultProguardFile(projectProguardFile),
  90. projectProguardRulesFile
  91. )
  92. }
  93. release {
  94. isMinifyEnabled = true
  95. isShrinkResources = false
  96. proguardFiles(
  97. getDefaultProguardFile(projectProguardFile),
  98. projectProguardRulesFile
  99. )
  100. }
  101. }
  102. sourceSets {
  103. getByName("main") { jniLibs.srcDirs() }
  104. }
  105. lint {
  106. checkAllWarnings = true
  107. showAll = true
  108. explainIssues = true
  109. abortOnError = true
  110. warningsAsErrors = true
  111. disable += "UnusedIds"
  112. }
  113. testOptions {
  114. unitTests.isReturnDefaultValues = true
  115. }
  116. testCoverage {
  117. jacocoVersion = projectJacocoVersion
  118. }
  119. }
  120. afterEvaluate {
  121. val libConfig = project.extension<LibConfig>()
  122. kotlinCompileOptions{
  123. kotlinOptions {
  124. freeCompilerArgs += "-Xjsr305=strict"
  125. jvmTarget = projectJavaVersion.toString()
  126. }
  127. }
  128. detektTask {
  129. if (libConfig.autoCorrectCode) runAfterAssembleTask()
  130. }
  131. dokkaTask {
  132. outputDirectory.set(
  133. project.rootDir.resolve(libConfig.documentationDir)
  134. )
  135. moduleName.set(project.name)
  136. suppressObviousFunctions.set(false)
  137. dokkaSourceSets.configureEach {
  138. offlineMode.set(false)
  139. includeNonPublic.set(true)
  140. skipDeprecated.set(false)
  141. reportUndocumented.set(true)
  142. skipEmptyPackages.set(false)
  143. platform.set(Platform.jvm)
  144. jdkVersion.set(projectJavaVersion.asInt())
  145. noStdlibLink.set(false)
  146. noJdkLink.set(false)
  147. noAndroidSdkLink.set(false)
  148. }
  149. if (libConfig.createDocumentation) runAfterAssembleTask()
  150. }
  151. configure<DetektExtension> {
  152. @Suppress("DEPRECATION")
  153. config = files(project.rootDir.resolve(libConfig.detectConfigFile))
  154. }
  155. configure<KotlinterExtension> {
  156. ignoreFailures = false
  157. reporters = arrayOf("checkstyle", "plain")
  158. }
  159. // configurations.getByName("releaseRuntimeClasspath") {
  160. // resolutionStrategy.activateDependencyLocking()
  161. // }
  162. // configurations.getByName("debugRuntimeClasspath") {
  163. // resolutionStrategy.activateDependencyLocking()
  164. // }
  165. }
  166. dependencyLocking {
  167. // lockMode.set(LockMode.STRICT)
  168. }
  169. dependencies {
  170. // add(IMPLEMENTATION, Dependencies.AndroidX.ANNOTATION)
  171. // add(IMPLEMENTATION, Dependencies.AndroidX.APPCOMPAT)
  172. // add(IMPLEMENTATION, Dependencies.Kotlin.STD_LIB)
  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. }