From c908f989c8621decc80e91d5b7968aeaa0096999 Mon Sep 17 00:00:00 2001 From: Daniel Santiago Date: Wed, 28 Jun 2023 20:14:12 -0400 Subject: [PATCH] Update to Hilt 2.48.1 and use the KSP version * Moved protobuf to separate module to avoid having to wire KSP's Plugin with the Protobuf Plugin. * `@Binds` function cannot be an extension function. * Commented `kotlin.compiler.execution.strategy=in-process` in CI to circumvent OOMs due to increased metaspace usage. --- .github/ci-gradle.properties | 1 - app/build.gradle.kts | 2 +- .../kotlin/AndroidHiltConventionPlugin.kt | 10 ++-- core/datastore-proto/build.gradle.kts | 55 +++++++++++++++++++ .../nowinandroid/data/dark_theme_config.proto | 0 .../apps/nowinandroid/data/theme_brand.proto | 0 .../nowinandroid/data/user_preferences.proto | 0 core/datastore/build.gradle.kts | 29 +--------- core/domain/build.gradle.kts | 4 +- gradle/libs.versions.toml | 2 +- settings.gradle.kts | 1 + sync/work/build.gradle.kts | 2 +- 12 files changed, 66 insertions(+), 40 deletions(-) create mode 100644 core/datastore-proto/build.gradle.kts rename core/{datastore => datastore-proto}/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto (100%) rename core/{datastore => datastore-proto}/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto (100%) rename core/{datastore => datastore-proto}/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto (100%) diff --git a/.github/ci-gradle.properties b/.github/ci-gradle.properties index bd989705d..dbafa68cd 100644 --- a/.github/ci-gradle.properties +++ b/.github/ci-gradle.properties @@ -19,7 +19,6 @@ org.gradle.parallel=true org.gradle.workers.max=2 kotlin.incremental=false -kotlin.compiler.execution.strategy=in-process # Controls KotlinOptions.allWarningsAsErrors. # This value used in CI and is currently set to false. diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1fd5e27a6..1fc5d0c95 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -130,6 +130,6 @@ dependencies { testImplementation(libs.accompanist.testharness) testImplementation(libs.work.testing) testImplementation(kotlin("test")) - kaptTest(libs.hilt.compiler) + kspTest(libs.hilt.compiler) } diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt index a0e81a27c..b24594570 100644 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt @@ -23,17 +23,15 @@ class AndroidHiltConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { with(pluginManager) { + apply("com.google.devtools.ksp") apply("dagger.hilt.android.plugin") - // 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") } dependencies { "implementation"(libs.findLibrary("hilt.android").get()) - "kapt"(libs.findLibrary("hilt.compiler").get()) - "kaptAndroidTest"(libs.findLibrary("hilt.compiler").get()) - "kaptTest"(libs.findLibrary("hilt.compiler").get()) + "ksp"(libs.findLibrary("hilt.compiler").get()) + "kspAndroidTest"(libs.findLibrary("hilt.compiler").get()) + "kspTest"(libs.findLibrary("hilt.compiler").get()) } } diff --git a/core/datastore-proto/build.gradle.kts b/core/datastore-proto/build.gradle.kts new file mode 100644 index 000000000..157b5336e --- /dev/null +++ b/core/datastore-proto/build.gradle.kts @@ -0,0 +1,55 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.protobuf) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.core.datastore.proto" +} + +// Setup protobuf configuration, generating lite Java and Kotlin classes +protobuf { + protoc { + artifact = libs.protobuf.protoc.get().toString() + } + generateProtoTasks { + all().forEach { task -> + task.builtins { + register("java") { + option("lite") + } + register("kotlin") { + option("lite") + } + } + } + } +} + +androidComponents.beforeVariants { + android.sourceSets.register(it.name) { + val buildDir = layout.buildDirectory.get().asFile + java.srcDir(buildDir.resolve("generated/source/proto/${it.name}/java")) + kotlin.srcDir(buildDir.resolve("generated/source/proto/${it.name}/kotlin")) + } +} + +dependencies { + implementation(libs.protobuf.kotlin.lite) +} diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto similarity index 100% rename from core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto rename to core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto similarity index 100% rename from core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto rename to core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto similarity index 100% rename from core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto rename to core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts index f0cc9af47..afe036640 100644 --- a/core/datastore/build.gradle.kts +++ b/core/datastore/build.gradle.kts @@ -18,7 +18,6 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.jacoco) alias(libs.plugins.nowinandroid.android.hilt) - alias(libs.plugins.protobuf) } android { @@ -33,34 +32,8 @@ android { } } -// Setup protobuf configuration, generating lite Java and Kotlin classes -protobuf { - protoc { - artifact = libs.protobuf.protoc.get().toString() - } - generateProtoTasks { - all().forEach { task -> - task.builtins { - register("java") { - option("lite") - } - register("kotlin") { - option("lite") - } - } - } - } -} - -androidComponents.beforeVariants { - android.sourceSets.register(it.name) { - val buildDir = layout.buildDirectory.get().asFile - java.srcDir(buildDir.resolve("generated/source/proto/${it.name}/java")) - kotlin.srcDir(buildDir.resolve("generated/source/proto/${it.name}/kotlin")) - } -} - dependencies { + api(projects.core.datastoreProto) implementation(projects.core.common) implementation(projects.core.model) implementation(libs.androidx.dataStore.core) diff --git a/core/domain/build.gradle.kts b/core/domain/build.gradle.kts index 78cf5187a..b81d62102 100644 --- a/core/domain/build.gradle.kts +++ b/core/domain/build.gradle.kts @@ -16,7 +16,7 @@ plugins { alias(libs.plugins.nowinandroid.android.library) alias(libs.plugins.nowinandroid.android.library.jacoco) - kotlin("kapt") + id("com.google.devtools.ksp") } android { @@ -30,7 +30,7 @@ dependencies { implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.datetime) - kapt(libs.hilt.compiler) + ksp(libs.hilt.compiler) testImplementation(projects.core.testing) } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0c841e484..8936e9be9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ gmsPlugin = "4.4.0" googleOss = "17.0.1" googleOssPlugin = "0.10.6" hilt = "2.48.1" -hiltExt = "1.0.0" +hiltExt = "1.1.0" jacoco = "0.8.7" junit4 = "4.13.2" kotlin = "1.9.10" diff --git a/settings.gradle.kts b/settings.gradle.kts index 8a72d695a..fa043c955 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -41,6 +41,7 @@ include(":core:data") include(":core:data-test") include(":core:database") include(":core:datastore") +include(":core:datastore-proto") include(":core:datastore-test") include(":core:designsystem") include(":core:domain") diff --git a/sync/work/build.gradle.kts b/sync/work/build.gradle.kts index 5eec3bb15..867aef17c 100644 --- a/sync/work/build.gradle.kts +++ b/sync/work/build.gradle.kts @@ -40,7 +40,7 @@ dependencies { prodImplementation(libs.firebase.cloud.messaging) - kapt(libs.hilt.ext.compiler) + ksp(libs.hilt.ext.compiler) testImplementation(projects.core.testing)