diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7accdbc1..a6b4bd23 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -24,9 +24,10 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() + kotlin { + jvmToolchain(17) } + buildFeatures { compose = true } diff --git a/appupdater/build.gradle.kts b/appupdater/build.gradle.kts index 98268d5c..2e94abf4 100644 --- a/appupdater/build.gradle.kts +++ b/appupdater/build.gradle.kts @@ -1,24 +1,9 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary plugins { - alias(libs.plugins.androidLibrary) - alias(libs.plugins.jetbrainsKotlinAndroid) - alias(libs.plugins.maven.publish) + alias(libs.plugins.project.androidLibrary) } android { - compileSdk = libs.versions.compileSdkVersion.get().toInt() - defaultConfig { - minSdk = libs.versions.minSdkVersion.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } buildFeatures { viewBinding = true } @@ -51,7 +36,7 @@ dependencies { testImplementation(libs.junit4) testImplementation(libs.mockito.kotlin) testImplementation(libs.turbine) - testImplementation (libs.kotlinx.coroutines.test) + testImplementation(libs.kotlinx.coroutines.test) androidTestImplementation(libs.androidx.test.junit) androidTestImplementation(libs.androidx.test.rules) androidTestImplementation(libs.androidx.test.ui.espresso.core) diff --git a/build-logic/convention/.gitignore b/build-logic/convention/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/build-logic/convention/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts new file mode 100644 index 00000000..19729dc2 --- /dev/null +++ b/build-logic/convention/build.gradle.kts @@ -0,0 +1,24 @@ +plugins { + `kotlin-dsl` +} + +group = "com.pouyaheydari.appupdater.convention" + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +dependencies { + compileOnly(libs.android.gradlePlugin) + compileOnly(libs.kotlin.gradlePlugin) +} + +gradlePlugin { + plugins { + create("androidLibraryPlugin") { + id = "com.pouyaheydari.androidLibraryPlugin" + implementationClass = "com.pouyaheydari.appupdater.convention.plugins.AndroidLibraryPlugin" + } + } +} diff --git a/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/helpers/JavaVersionHelper.kt b/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/helpers/JavaVersionHelper.kt new file mode 100644 index 00000000..fbb6bad1 --- /dev/null +++ b/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/helpers/JavaVersionHelper.kt @@ -0,0 +1,5 @@ +package com.pouyaheydari.appupdater.convention.helpers + +import org.gradle.api.JavaVersion + +fun javaVersion(): JavaVersion = JavaVersion.VERSION_17 diff --git a/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/helpers/ProjectHelper.kt b/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/helpers/ProjectHelper.kt new file mode 100644 index 00000000..f348bbaa --- /dev/null +++ b/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/helpers/ProjectHelper.kt @@ -0,0 +1,13 @@ +package com.pouyaheydari.appupdater.convention.helpers + +import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalog +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.kotlin.dsl.getByType + +fun Project.compileSdk(): Int = baseLibs.findVersion("compileSdkVersion").get().requiredVersion.toInt() + +fun Project.minSdk(): Int = baseLibs.findVersion("minSdkVersion").get().requiredVersion.toInt() + +val Project.baseLibs + get(): VersionCatalog = extensions.getByType().named("libs") diff --git a/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/plugins/AndroidLibraryPlugin.kt b/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/plugins/AndroidLibraryPlugin.kt new file mode 100644 index 00000000..78019ace --- /dev/null +++ b/build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/plugins/AndroidLibraryPlugin.kt @@ -0,0 +1,41 @@ +package com.pouyaheydari.appupdater.convention.plugins + +import com.android.build.gradle.LibraryExtension +import com.pouyaheydari.appupdater.convention.helpers.baseLibs +import com.pouyaheydari.appupdater.convention.helpers.compileSdk +import com.pouyaheydari.appupdater.convention.helpers.javaVersion +import com.pouyaheydari.appupdater.convention.helpers.minSdk +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.kotlin.dsl.configure +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension + +class AndroidLibraryPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply(baseLibs.findPlugin("androidLibrary").get().get().pluginId) + apply(baseLibs.findPlugin("jetbrainsKotlinAndroid").get().get().pluginId) + apply(baseLibs.findPlugin("maven.publish").get().get().pluginId) + } + + extensions.configure { + compileSdk = compileSdk() + defaultConfig { + minSdk = minSdk() + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + compileOptions { + sourceCompatibility = javaVersion() + targetCompatibility = javaVersion() + } + } + extensions.configure { + jvmToolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } + } + } + } +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 00000000..c2b363c1 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,16 @@ +dependencyResolutionManagement { + + repositories { + google() + mavenCentral() + } + + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + +rootProject.name = "build-logic" +include(":convention") diff --git a/build.gradle.kts b/build.gradle.kts index cc341ca6..2a601f8b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.androidApplication) apply false - alias(libs.plugins.androidLibrary) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.compose.compiler) apply false diff --git a/compose/build.gradle.kts b/compose/build.gradle.kts index 72870417..d4b2fe1f 100644 --- a/compose/build.gradle.kts +++ b/compose/build.gradle.kts @@ -1,31 +1,18 @@ plugins { - alias(libs.plugins.androidLibrary) - alias(libs.plugins.jetbrainsKotlinAndroid) + alias(libs.plugins.project.androidLibrary) alias(libs.plugins.compose.compiler) - alias(libs.plugins.maven.publish) } android { - compileSdk = libs.versions.compileSdkVersion.get().toInt() defaultConfig { - minSdk = libs.versions.minSdkVersion.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } } namespace = "com.pouyaheydari.appupdater.compose" - testOptions.unitTests.isIncludeAndroidResources = true - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } buildFeatures { compose = true } diff --git a/directdownload/build.gradle.kts b/directdownload/build.gradle.kts index 77e7acb2..db8bd211 100644 --- a/directdownload/build.gradle.kts +++ b/directdownload/build.gradle.kts @@ -1,23 +1,8 @@ plugins { - alias(libs.plugins.androidLibrary) - alias(libs.plugins.jetbrainsKotlinAndroid) - alias(libs.plugins.maven.publish) + alias(libs.plugins.project.androidLibrary) } android { - compileSdk = libs.versions.compileSdkVersion.get().toInt() - defaultConfig { - minSdk = libs.versions.minSdkVersion.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } namespace = "com.pouyaheydari.appupdater.directdownload" } @@ -31,9 +16,8 @@ dependencies { testImplementation(libs.junit4) testImplementation(libs.mockito) testImplementation(libs.mockito.kotlin) - testImplementation (libs.kotlinx.coroutines.test) - testImplementation (libs.roboelectric) - + testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.roboelectric) androidTestImplementation(libs.androidx.test.junit) androidTestImplementation(libs.androidx.test.rules) androidTestImplementation(libs.androidx.test.ui.espresso.core) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 535e2fbc..3454cd3e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,27 +3,27 @@ appVersion = "1000" compileSdkVersion = "36" minSdkVersion = "23" targetSdkVersion = "36" -agp = "8.12.0" -kotlin = "2.2.0" +agp = "8.13.2" +kotlin = "2.2.21" appcompat = "1.7.1" -androidXCore = "1.16.0" +androidXCore = "1.17.0" constraintLayout = "2.2.1" junit4 = "4.13.2" androidTestJUnit = "1.3.0" androidTestRules = "1.7.0" androidTestEspresso = "3.7.0" recyclerView = "1.4.0" -lifecycle = "2.9.2" +lifecycle = "2.10.0" coroutines = "1.10.2" -fragment = "1.8.8" -androidxComposeBom = "2025.07.00" -composeActivity = "1.10.1" -mockito = "5.18.0" -mockitoKotlin = "6.0.0" -roboelectric = "4.15.1" +fragment = "1.8.9" +androidxComposeBom = "2025.12.00" +composeActivity = "1.12.1" +mockito = "5.21.0" +mockitoKotlin = "6.1.0" +roboelectric = "4.16" turbine = "1.2.1" uiautomator = "2.3.0" -mavenPublish = "0.34.0" +mavenPublish = "0.35.0" [libraries] androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } @@ -54,6 +54,8 @@ kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-t kotlinx-coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "coroutines" } androidx-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" } turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" } +android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "agp" } +kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } @@ -62,3 +64,4 @@ jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "k kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "mavenPublish" } +project-androidLibrary = { id = "com.pouyaheydari.androidLibraryPlugin"} diff --git a/settings.gradle.kts b/settings.gradle.kts index 8e343cb5..f6da1a18 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,7 @@ pluginManagement { + + includeBuild("build-logic") + repositories { google() mavenCentral() diff --git a/store/build.gradle.kts b/store/build.gradle.kts index 198fc43d..ed38fa28 100644 --- a/store/build.gradle.kts +++ b/store/build.gradle.kts @@ -1,30 +1,11 @@ plugins { - alias(libs.plugins.androidLibrary) - alias(libs.plugins.jetbrainsKotlinAndroid) - alias(libs.plugins.maven.publish) + alias(libs.plugins.project.androidLibrary) } android { - compileSdk = libs.versions.compileSdkVersion.get().toInt() - defaultConfig { - minSdk = libs.versions.minSdkVersion.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } namespace = "com.pouyaheydari.appupdater.store" } -java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 -} + dependencies { api(projects.core)