| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- /*
- * Copyright (c) Milan Jurkulák 2024.
- * Contact:
- * e: mimoccc@gmail.com
- * e: mj@mjdev.org
- * w: https://mjdev.org
- */
- package org.mjdev.gradle.plugin
- import com.android.build.api.dsl.ApplicationExtension
- import io.gitlab.arturbosch.detekt.DetektPlugin
- import io.gitlab.arturbosch.detekt.extensions.DetektExtension
- import org.gradle.api.JavaVersion
- import org.gradle.api.Project
- import org.gradle.kotlin.dsl.apply
- import org.gradle.kotlin.dsl.configure
- import org.mjdev.gradle.extensions.addSyncProviderAuthString
- import org.mjdev.gradle.extensions.buildConfigString
- import org.mjdev.gradle.extensions.manifestPlaceholders
- import org.mjdev.gradle.extensions.setSigningConfigs
- import org.mjdev.gradle.extensions.stringRes
- import org.mjdev.gradle.extensions.versionCode
- import org.mjdev.gradle.extensions.versionName
- import org.gradle.kotlin.dsl.dependencies
- import org.jetbrains.dokka.Platform
- import org.jmailen.gradle.kotlinter.KotlinterExtension
- import org.jmailen.gradle.kotlinter.KotlinterPlugin
- import org.mjdev.gradle.base.BasePlugin
- import org.mjdev.gradle.plugin.config.AppConfig
- import org.mjdev.gradle.extensions.asInt
- @Suppress("UnstableApiUsage")
- class AppPlugin : BasePlugin() {
- private val projectNamespace = "org.mjdev.tvapp"
- private val projectCompileSdk = 34
- private val projectMinSdk = 21
- private val projectJavaVersion = JavaVersion.VERSION_17
- private val projectKotlinCompilerVersion = "1.5.8"
- private val projectExcludes = listOf(
- "META-INF/",
- "/META-INF/{AL2.0,LGPL2.1}",
- "/META-INF/DEPENDENCIES",
- "/mozilla/public-suffix-list.txt",
- "okhttp3/",
- "kotlin/",
- "org/",
- ".properties",
- ".bin",
- )
- private val projectProguardFile = "proguard-android-optimize.txt"
- private val projectProguardRulesFile = "proguard-rules.pro"
- private val projectJacocoVersion = "0.8.8"
- private val projectLibVersionsFile = "gradle/libs.versions.toml"
- private val configFieldName = "appConfig"
- override fun Project.work() {
- loadVersionCatalog(projectLibVersionsFile)
- extension<AppConfig>(configFieldName)
- apply(plugin = "version-catalog")
- apply(plugin = "kotlin-android")
- apply(plugin = "com.android.application")
- apply(plugin = "kotlin-kapt")
- apply(plugin = "kotlin-parcelize")
- apply(plugin = "com.google.devtools.ksp")
- apply(plugin = "com.google.dagger.hilt.android")
- apply(plugin = "dagger.hilt.android.plugin")
- apply(plugin = "io.objectbox")
- apply(DetektPlugin::class)
- apply(KotlinterPlugin::class)
- apply("org.jetbrains.dokka")
- configure<ApplicationExtension> {
- namespace = projectNamespace
- compileSdk = projectCompileSdk
- setSigningConfigs(project) {
- debugKeyFile = "config/signing.prop"
- releaseKeyFile = "config/signing.prop"
- }
- buildFeatures {
- compose = true
- buildConfig = true
- }
- compileOptions {
- sourceCompatibility = projectJavaVersion
- targetCompatibility = projectJavaVersion
- }
- composeOptions {
- kotlinCompilerExtensionVersion = projectKotlinCompilerVersion
- }
- defaultConfig {
- applicationId = projectNamespace
- minSdk = projectMinSdk
- targetSdk = projectCompileSdk
- versionCode = project.versionCode
- versionName = project.versionName
- multiDexEnabled = true
- buildConfigString(
- "IPTV_API_URL" to "https://iptv-org.github.io/api/",
- "GITHUB_USER" to "mimoccc",
- "GITHUB_REPOSITORY" to "tvapp"
- )
- manifestPlaceholders(
- "auth0Domain" to "@string/com_auth0_domain",
- "auth0Scheme" to "demo"
- )
- testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
- }
- packaging {
- resources {
- excludes.addAll(projectExcludes)
- }
- }
- buildTypes {
- debug {
- applicationIdSuffix = ".$name"
- isDebuggable = true
- isJniDebuggable = true
- isMinifyEnabled = false
- isShrinkResources = false
- isCrunchPngs = false
- // isEmbedMicroApp = true
- // isPseudoLocalesEnabled = true
- // enableUnitTestCoverage = true
- // enableAndroidTestCoverage = true
- // isRenderscriptDebuggable = true
- // isZipAlignEnabled = false
- signingConfig = signingConfigs.getAt(name)
- stringRes("app_name", "TVApp-Debug")
- addSyncProviderAuthString("sync_auth", ".sync")
- proguardFiles(
- getDefaultProguardFile(projectProguardFile),
- projectProguardRulesFile
- )
- }
- release {
- applicationIdSuffix = ".$name"
- isDebuggable = false
- isJniDebuggable = false
- isMinifyEnabled = true
- isShrinkResources = true
- isCrunchPngs = true
- // isEmbedMicroApp = true
- // isPseudoLocalesEnabled = false
- // enableUnitTestCoverage = false
- // enableAndroidTestCoverage = false
- // isRenderscriptDebuggable = false
- // isZipAlignEnabled = true
- signingConfig = signingConfigs.getAt(name)
- stringRes("app_name", "TVApp")
- addSyncProviderAuthString("sync_auth", ".sync")
- proguardFiles(
- getDefaultProguardFile(projectProguardFile),
- projectProguardRulesFile
- )
- }
- }
- // kotlinOptions {
- // jvmTarget = JavaVersion.VERSION_17.toString()
- // }
- sourceSets {
- getByName("main") { jniLibs.srcDirs() }
- }
- lint {
- checkReleaseBuilds = false
- checkAllWarnings = true
- showAll = true
- explainIssues = true
- abortOnError = true
- warningsAsErrors = true
- disable += "UnusedIds"
- }
- // kapt {
- // correctErrorTypes = true
- // }
- // hilt {
- // enableAggregatingTask = true
- // }
- testOptions {
- unitTests.isReturnDefaultValues = true
- }
- testCoverage {
- jacocoVersion = projectJacocoVersion
- }
- }
- // app
- afterEvaluate {
- val appConfig = project.extension<AppConfig>()
- kotlinCompileOptions {
- kotlinOptions {
- freeCompilerArgs += "-Xjsr305=strict"
- jvmTarget = projectJavaVersion.toString()
- }
- }
- detektTask {
- if (appConfig.autoCorrectCode) runAfterAssembleTask()
- }
- dokkaTask {
- outputDirectory.set(project.rootDir.resolve(appConfig.documentationDir))
- moduleName.set(project.name)
- suppressObviousFunctions.set(false)
- dokkaSourceSets.configureEach {
- offlineMode.set(false)
- includeNonPublic.set(true)
- skipDeprecated.set(false)
- reportUndocumented.set(true)
- skipEmptyPackages.set(false)
- platform.set(Platform.jvm)
- jdkVersion.set(projectJavaVersion.asInt())
- noStdlibLink.set(false)
- noJdkLink.set(false)
- noAndroidSdkLink.set(false)
- }
- if (appConfig.createDocumentation) runAfterAssembleTask()
- }
- configure<DetektExtension> {
- @Suppress("DEPRECATION")
- config = files(project.rootDir.resolve(appConfig.detectConfigFile))
- }
- configure<KotlinterExtension> {
- ignoreFailures = false
- reporters = arrayOf("checkstyle", "plain")
- }
- // configurations.getByName("releaseRuntimeClasspath") {
- // resolutionStrategy.activateDependencyLocking()
- // }
- // configurations.getByName("debugRuntimeClasspath") {
- // resolutionStrategy.activateDependencyLocking()
- // }
- // applicationVariants.all {
- // outputs.map {
- // it as BaseVariantOutputImpl
- // }.forEach { output ->
- // val outputFileName = "$applicationId-$versionName.apk"
- // output.outputFileName = outputFileName
- // }
- // }
- }
- dependencyLocking {
- // lockMode.set(LockMode.STRICT)
- }
- dependencies {
- // add(IMPLEMENTATION, libs.androidx.compose.ui.tooling)
- // add(IMPLEMENTATION, Dependencies.AndroidX.ANNOTATION)
- // add(IMPLEMENTATION, Dependencies.AndroidX.APPCOMPAT)
- // add(IMPLEMENTATION, Dependencies.Kotlin.STD_LIB)
- }
- }
- }
|