diff --git a/app/build.gradle.kts b/app/build.gradle.kts index af388a3..cb58789 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -9,9 +9,8 @@ import java.io.FileInputStream import java.util.* plugins { - id("kotlin-android") + id("gq.kirmanak.mealient.application") id("kotlin-kapt") - id("com.android.application") id("androidx.navigation.safeargs.kotlin") id("dagger.hilt.android.plugin") id("org.jetbrains.kotlin.plugin.serialization") @@ -23,12 +22,8 @@ plugins { } android { - compileSdk = libs.versions.compileSdk.get().toInt() - defaultConfig { applicationId = "gq.kirmanak.mealient" - minSdk = libs.versions.minSdk.get().toInt() - targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 13 versionName = "0.2.4" @@ -110,10 +105,6 @@ android { packagingOptions { resources.excludes += "DebugProbesKt.bin" } - - compileOptions { - isCoreLibraryDesugaringEnabled = true - } } tasks.withType().configureEach { @@ -130,8 +121,6 @@ tasks.withType { } dependencies { - coreLibraryDesugaring(libs.android.tools.desugar) - implementation(libs.android.material.material) implementation(libs.androidx.navigation.fragmentKtx) diff --git a/build-logic/convention/.gitignore b/build-logic/convention/.gitignore new file mode 100644 index 0000000..a774788 --- /dev/null +++ b/build-logic/convention/.gitignore @@ -0,0 +1,2 @@ +/build + diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts new file mode 100644 index 0000000..8bb1f5d --- /dev/null +++ b/build-logic/convention/build.gradle.kts @@ -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" + } + } +} diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt new file mode 100644 index 0000000..4aee756 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -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 { + + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("com.android.application") + apply("org.jetbrains.kotlin.android") + } + + extensions.configure { + configureKotlinAndroid(this) + defaultConfig.targetSdk = Versions.TARGET_SDK_VERSION + } + } + } +} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/KotlinAndroid.kt new file mode 100644 index 0000000..88ccfa9 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/KotlinAndroid.kt @@ -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) +} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Versions.kt b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Versions.kt new file mode 100644 index 0000000..8750165 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/gq/kirmanak/mealient/Versions.kt @@ -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().named("libs") diff --git a/build-logic/gradle.properties b/build-logic/gradle.properties new file mode 100644 index 0000000..1c9073e --- /dev/null +++ b/build-logic/gradle.properties @@ -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 diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 0000000..c230f78 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,15 @@ +@file:Suppress("UnstableApiUsage") + +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + +include(":convention") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 575762d..c723c46 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,4 @@ [versions] -compileSdk = "32" -minSdk = "23" -targetSdk = "32" - # https://maven.google.com/web/index.html?q=com.android.tools.build#com.android.tools.build:gradle androidGradlePlugin = "7.2.1" # https://developers.google.com/android/guides/google-services-plugin diff --git a/settings.gradle.kts b/settings.gradle.kts index b8588e0..b1cb398 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,14 @@ @file:Suppress("UnstableApiUsage") +pluginManagement { + includeBuild("build-logic") + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories {