From f316be1d692fdb9e13596f0ba5cc7d537a2cdfa1 Mon Sep 17 00:00:00 2001 From: Ben Weiss Date: Thu, 1 Dec 2022 09:11:02 +0000 Subject: [PATCH] Add Firebase dependencies This sets up the project for using Firebase Crashlytics and Performance Monitoring. Change-Id: I8d14cfd2e5c2ba1911f2c3175adc20d6714addb6 --- app/build.gradle.kts | 2 +- build-logic/convention/build.gradle.kts | 6 +-- .../kotlin/AndroidHiltConventionPlugin.kt | 3 -- .../main/kotlin/FirebaseConventionPlugin.kt | 45 +++++++++++++++++++ .../kotlin/FirebasePerfConventionPlugin.kt | 29 ------------ build.gradle.kts | 9 ++++ gradle/libs.versions.toml | 12 +++++ 7 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 build-logic/convention/src/main/kotlin/FirebaseConventionPlugin.kt delete mode 100644 build-logic/convention/src/main/kotlin/FirebasePerfConventionPlugin.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3cc48f284..09efa62fd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,8 +20,8 @@ plugins { id("nowinandroid.android.application.compose") id("nowinandroid.android.application.jacoco") id("nowinandroid.android.hilt") + id("nowinandroid.firebase") id("jacoco") - id("nowinandroid.firebase-perf") } android { diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 453085807..d1f3b3ab9 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -68,9 +68,9 @@ gradlePlugin { id = "nowinandroid.android.hilt" implementationClass = "AndroidHiltConventionPlugin" } - register("firebase-perf") { - id = "nowinandroid.firebase-perf" - implementationClass = "FirebasePerfConventionPlugin" + register("firebase") { + id = "nowinandroid.firebase" + implementationClass = "FirebaseConventionPlugin" } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt index 772064942..29cb748c2 100644 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt @@ -14,14 +14,11 @@ * limitations under the License. */ -import com.android.build.api.variant.LibraryAndroidComponentsExtension -import com.google.samples.apps.nowinandroid.configureJacoco import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType -import org.gradle.kotlin.dsl.kotlin class AndroidHiltConventionPlugin : Plugin { override fun apply(target: Project) { diff --git a/build-logic/convention/src/main/kotlin/FirebaseConventionPlugin.kt b/build-logic/convention/src/main/kotlin/FirebaseConventionPlugin.kt new file mode 100644 index 000000000..70054408d --- /dev/null +++ b/build-logic/convention/src/main/kotlin/FirebaseConventionPlugin.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2022 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. + */ + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getByType + +class FirebaseConventionPlugin : Plugin { + override fun apply(target: Project) { + // Only apply this to Google Play releases. + if (!target.hasProperty("use-google-services")) + return + with(target) { + with(pluginManager) { + apply("com.google.gms.google-services") + apply("com.google.firebase.firebase-perf") + apply("com.google.firebase.crashlytics") + } + + val libs = extensions.getByType().named("libs") + dependencies { + val bom = libs.findLibrary("firebase-bom").get() + add("releaseImplementation", platform(bom)) + "releaseImplementation"(libs.findLibrary("firebase.analytics").get()) + "releaseImplementation"(libs.findLibrary("firebase.crashlytics").get()) + "releaseImplementation"(libs.findLibrary("firebase.performance").get()) + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/FirebasePerfConventionPlugin.kt b/build-logic/convention/src/main/kotlin/FirebasePerfConventionPlugin.kt deleted file mode 100644 index 48f750678..000000000 --- a/build-logic/convention/src/main/kotlin/FirebasePerfConventionPlugin.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2022 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. - */ - -import org.gradle.api.Plugin -import org.gradle.api.Project - -class FirebasePerfConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - pluginManager.findPlugin("com.google.firebase.firebase-perf").apply { - version = "1.4.1" - } - } - } - -} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 6f6d375d7..bd395ceac 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,12 +23,21 @@ buildscript { maven { url = uri("../nowinandroid-prebuilts/m2repository") } } + dependencies { + if (project.hasProperty("use-google-services")) { + classpath(libs.firebase.crashlytics.gradle) + } + } } +// Lists all plugins used throughout the project without applying them. plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false + alias(libs.plugins.firebase.crashlytics) apply false + alias(libs.plugins.firebase.perf) apply false + alias(libs.plugins.gms) apply false alias(libs.plugins.hilt) apply false alias(libs.plugins.secrets) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 887769cbf..4d6b694cc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,6 +28,10 @@ androidxUiAutomator = "2.2.0" androidxWindowManager = "1.0.0" androidxWork = "2.7.1" coil = "2.2.2" +firebaseBom = "31.0.3" +firebaseCrashlyticsPlugin = "2.9.2" +firebasePerfPlugin = "1.4.2" +gmsPlugin = "4.3.14" hilt = "2.44.2" hiltExt = "1.0.0" jacoco = "0.8.7" @@ -96,6 +100,11 @@ androidx-work-testing = { group = "androidx.work", name = "work-testing", versio coil-kt = { group = "io.coil-kt", name = "coil", version.ref = "coil" } coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } +firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref="firebaseBom"} +firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics-ktx"} +firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics-ktx"} +firebase-crashlytics-gradle = { group = "com.google.firebase", name="firebase-crashlytics-gradle", version.ref = "firebaseCrashlyticsPlugin"} +firebase-performance = { group = "com.google.firebase", name = "firebase-perf-ktx"} hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-android-testing = { group = "com.google.dagger", name = "hilt-android-testing", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } @@ -126,6 +135,9 @@ kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-pl android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" } android-test = { id = "com.android.test", version.ref = "androidGradlePlugin" } +firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsPlugin"} +firebase-perf = { id = "com.google.firebase.firebase-perf", version.ref = "firebasePerfPlugin"} +gms = { id = "com.google.gms.google-services", version.ref = "gmsPlugin"} hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }