Extract application build setup to plugin

This commit is contained in:
Kirill Kamakin
2022-08-03 19:48:55 +02:00
parent e5230e4394
commit 4d53b10db0
10 changed files with 125 additions and 16 deletions

2
build-logic/convention/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/build

View File

@@ -0,0 +1,19 @@
plugins {
`kotlin-dsl`
}
group = "gq.kirmanak.mealient.buildlogic"
dependencies {
implementation(libs.jetbrains.kotlinPlugin)
implementation(libs.android.gradlePlugin)
}
gradlePlugin {
plugins {
register("androidApplication") {
id = "gq.kirmanak.mealient.application"
implementationClass = "AndroidApplicationConventionPlugin"
}
}
}

View File

@@ -0,0 +1,23 @@
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import gq.kirmanak.mealient.Versions
import gq.kirmanak.mealient.configureKotlinAndroid
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
}
extensions.configure<BaseAppModuleExtension> {
configureKotlinAndroid(this)
defaultConfig.targetSdk = Versions.TARGET_SDK_VERSION
}
}
}
}

View File

@@ -0,0 +1,37 @@
@file:Suppress("UnstableApiUsage")
package gq.kirmanak.mealient
import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
internal fun Project.configureKotlinAndroid(
commonExtension: CommonExtension<*, *, *, *>,
) {
commonExtension.apply {
compileSdk = Versions.COMPILE_SDK_VERSION
defaultConfig {
minSdk = Versions.MIN_SDK_VERSION
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
}
kotlinOptions {
freeCompilerArgs = freeCompilerArgs + listOf("-opt-in=kotlin.RequiresOptIn")
}
dependencies {
add("coreLibraryDesugaring", libs.findLibrary("android-tools-desugar").get())
}
}
}
fun CommonExtension<*, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
(this as ExtensionAware).extensions.configure("kotlinOptions", block)
}

View File

@@ -0,0 +1,15 @@
package gq.kirmanak.mealient
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType
object Versions {
const val MIN_SDK_VERSION = 23
const val TARGET_SDK_VERSION = 32
const val COMPILE_SDK_VERSION = 32
}
val Project.libs: VersionCatalog
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")

View File

@@ -0,0 +1,4 @@
# Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true

View File

@@ -0,0 +1,15 @@
@file:Suppress("UnstableApiUsage")
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
include(":convention")