diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 87ba1b0c1d..1e81caf74b 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -13,8 +13,6 @@ dependencies { compileOnly(libs.plugin.firebase.perf) // Protobuf compileOnly(libs.plugin.protobuf) - // Room - compileOnly(libs.plugin.room) // Hilt compileOnly(libs.plugin.hilt) // Android X Navigation components diff --git a/build-logic/convention/src/main/kotlin/LibraryHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/LibraryHiltConventionPlugin.kt index 106d192f84..b0fd2db971 100644 --- a/build-logic/convention/src/main/kotlin/LibraryHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/LibraryHiltConventionPlugin.kt @@ -1,18 +1,29 @@ import common.getLibs import common.implementation -import common.ksp -import common.kspAndroidTest -import common.kspTest +import common.kapt +import common.kaptAndroidTest +import common.kaptTest import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies +import org.jetbrains.kotlin.gradle.plugin.KaptExtension class LibraryHiltConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { apply("dagger.hilt.android.plugin") - apply("com.google.devtools.ksp") + // KAPT must go last to avoid build warnings. + // See: https://stackoverflow.com/questions/70550883/warning-the-following-options-were-not-recognized-by-any-processor-dagger-f + apply("org.jetbrains.kotlin.kapt") + } + + extensions.configure { + useBuildCache = true + arguments { + arg("realm.ignoreKotlinNullability", true) + } } val libs = getLibs() @@ -20,11 +31,11 @@ class LibraryHiltConventionPlugin : Plugin { implementation(libs, "hilt") implementation(libs, "hilt.work") - ksp(libs, "hilt.dagger.compiler") - ksp(libs, "hilt.compiler") + kapt(libs, "hilt.kapt") + kapt(libs, "hilt.compiler") - kspTest(libs, "testing.hilt.compiler") - kspAndroidTest(libs, "testing.hilt.compiler") + kaptTest(libs, "testing.hilt.kapt") + kaptAndroidTest(libs, "testing.hilt.kapt") } } } diff --git a/build-logic/convention/src/main/kotlin/LibraryProtobufConventionPlugin.kt b/build-logic/convention/src/main/kotlin/LibraryProtobufConventionPlugin.kt index 05814dbc70..e8a2ee101c 100644 --- a/build-logic/convention/src/main/kotlin/LibraryProtobufConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/LibraryProtobufConventionPlugin.kt @@ -1,5 +1,3 @@ -import com.android.build.api.variant.AndroidComponentsExtension -import com.google.protobuf.gradle.GenerateProtoTask import com.google.protobuf.gradle.ProtobufExtension import common.getLibs import common.implementation @@ -7,7 +5,6 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies -import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool class LibraryProtobufConventionPlugin : Plugin { override fun apply(target: Project) { @@ -33,22 +30,6 @@ class LibraryProtobufConventionPlugin : Plugin { dependencies { implementation(libs, "protobuf") } - - // Fox for known issue with KSP and protobuf - // https://github.com/google/ksp/issues/1590#issuecomment-1826387452 - project.extensions.getByType(AndroidComponentsExtension::class.java).onVariants { variant -> - afterEvaluate { - val variantName = variant.name.replaceFirstChar { it.uppercaseChar() } - val generateTaskName = "generate${variantName}Proto" - val kspTaskName = "ksp${variantName}Kotlin" - - val protoTask = project.tasks.getByName(generateTaskName) as GenerateProtoTask - project.tasks.getByName(kspTaskName) { - dependsOn(protoTask) - (this as AbstractKotlinCompileTool<*>).setSource(protoTask.outputBaseDir) - } - } - } } } } diff --git a/build-logic/convention/src/main/kotlin/LibraryRoomConventionPlugin.kt b/build-logic/convention/src/main/kotlin/LibraryRoomConventionPlugin.kt index 44e0942790..5c489cebf0 100644 --- a/build-logic/convention/src/main/kotlin/LibraryRoomConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/LibraryRoomConventionPlugin.kt @@ -2,30 +2,33 @@ import com.android.build.api.dsl.LibraryExtension import common.configureDbEncryptionBuild import common.getLibs import common.implementation -import common.ksp +import common.kapt import common.testImplementation import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies -import androidx.room.gradle.RoomExtension + class LibraryRoomConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { - apply("androidx.room") - apply("com.google.devtools.ksp") + apply("org.jetbrains.kotlin.kapt") } configureDbEncryptionBuild() - extensions.configure { - //Required by Room to be able to export the db schemas - schemaDirectory("$projectDir/schemas") - } - extensions.configure { + defaultConfig { + javaCompileOptions { + annotationProcessorOptions { + //Required by Room to be able to export the db schemas + arguments += mapOf("room.schemaLocation" to "$projectDir/schemas") + } + } + } + sourceSets { getByName("debug") { assets.srcDirs("$projectDir/schemas") @@ -40,7 +43,7 @@ class LibraryRoomConventionPlugin : Plugin { dependencies { implementation(libs, "androidX.Room.core") implementation(libs, "androidX.Room.ktx") - ksp(libs, "androidX.Room.compiler") + kapt(libs, "androidX.Room.compiler") implementation(libs, "sqlCipher.core") diff --git a/build-logic/convention/src/main/kotlin/common/DependencyExt.kt b/build-logic/convention/src/main/kotlin/common/DependencyExt.kt index 640680fa15..9d10bba181 100644 --- a/build-logic/convention/src/main/kotlin/common/DependencyExt.kt +++ b/build-logic/convention/src/main/kotlin/common/DependencyExt.kt @@ -27,14 +27,14 @@ internal fun DependencyHandlerScope.androidTestImplementation(libs: VersionCatal add("androidTestImplementation", libs.findLibrary(name).get()) } -internal fun DependencyHandlerScope.ksp(libs: VersionCatalog, name: String) { - add("ksp", libs.findLibrary(name).get()) +internal fun DependencyHandlerScope.kapt(libs: VersionCatalog, name: String) { + add("kapt", libs.findLibrary(name).get()) } -internal fun DependencyHandlerScope.kspTest(libs: VersionCatalog, name: String) { - add("kspTest", libs.findLibrary(name).get()) +internal fun DependencyHandlerScope.kaptTest(libs: VersionCatalog, name: String) { + add("kaptTest", libs.findLibrary(name).get()) } -internal fun DependencyHandlerScope.kspAndroidTest(libs: VersionCatalog, name: String) { - add("kspAndroidTest", libs.findLibrary(name).get()) +internal fun DependencyHandlerScope.kaptAndroidTest(libs: VersionCatalog, name: String) { + add("kaptAndroidTest", libs.findLibrary(name).get()) } diff --git a/build.gradle.kts b/build.gradle.kts index 542577552d..a089b1687f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,13 +4,11 @@ plugins { alias(libs.plugins.android.library) apply false alias(libs.plugins.android.test) apply false alias(libs.plugins.kotlin.android) apply false - alias(libs.plugins.ksp) apply false alias(libs.plugins.realm) apply false alias(libs.plugins.hilt) apply false alias(libs.plugins.protobuf) apply false alias(libs.plugins.navigation.args) apply false - alias(libs.plugins.room) apply false alias(libs.plugins.gms) apply false alias(libs.plugins.firebase.crashlytics) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ffd4e9aafa..2a6d80dcec 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,6 @@ [versions] kotlin_version = "2.0.10" kotlin_coroutine_version = "1.8.1" -ksp_version = "2.0.10-1.0.24" android_gradlePlugin_version = "8.3.1" androidx_version = "1.6.2" @@ -215,11 +214,11 @@ secugen = { module = "com.simprints:secugenwrapper", version.ref = "secugen_vers #hilt hilt = { module = "com.google.dagger:hilt-android", version.ref = "hilt_version" } -hilt-dagger-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt_version" } +hilt-kapt = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt_version" } hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "hilt_androidx_version" } hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "hilt_androidx_version" } testing-hilt = { module = "com.google.dagger:hilt-android-testing", version.ref = "hilt_version" } -testing-hilt-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt_version" } +testing-hilt-kapt = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt_version" } #Datastore datastore = { module = "androidx.datastore:datastore", version.ref = "androidx_datastore_version" } @@ -275,7 +274,6 @@ plugin-firebase-distribution = { group = "com.google.firebase", name = "firebase plugin-sonar = { group = "org.sonarsource.scanner.gradle", name = "sonarqube-gradle-plugin", version.ref = "sonar_plugin_version" } plugin-jacoco = { group = "org.jacoco", name = "org.jacoco.core", version.ref = "jacoco_version" } plugin-retry = { group = "org.gradle", name = "test-retry-gradle-plugin", version.ref = "retry_version" } -plugin-room = { group = "androidx.room", name = "room-gradle-plugin", version.ref = "androidx_room_version" } [plugins] @@ -283,7 +281,6 @@ android-application = { id = "com.android.application", version.ref = "android_g android-library = { id = "com.android.library", version.ref = "android_gradlePlugin_version" } android-test = { id = "com.android.test", version.ref = "android_gradlePlugin_version" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin_version" } -ksp = { id = "com.google.devtools.ksp", version.ref = "ksp_version" } gms = { id = "com.google.gms.google-services", version.ref = "gsm_plugin_version" } firebase-perf = { id = "com.google.firebase.firebase-perf", version.ref = "firebase_perfPlugin_version" } firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase_crashlyticsPlugin_version" } @@ -296,4 +293,3 @@ play-publisher = { id = "com.github.triplet.play", version.ref = "play_publisher retry = { id = "org.gradle.test-retry", version.ref = "retry_version" } sonar = { id = "org.sonarqube", version.ref = "sonar_plugin_version" } depsGraph = { id = "com.vanniktech.dependency.graph.generator", version.ref = "deps_graph_version" } -room = { id = "androidx.room", version.ref = "androidx_room_version" }