From ac11c3ab9ed7486c2b25eaa093a3c21d949f9e5d Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 5 Aug 2025 00:43:39 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[BOOK-202]=20feat:=20Firebase=20Crashlytics?= =?UTF-8?q?,=20GA=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 1 + app/src/main/AndroidManifest.xml | 4 +++ .../FirebaseCrashlyticsInitializer.kt | 16 ++++++++++++ build-logic/build.gradle.kts | 1 + .../kotlin/AndroidFirebaseConventionPlugin.kt | 25 +++++++++++++++++++ .../ninecraft/booket/convention/Plugins.kt | 2 ++ build.gradle.kts | 2 ++ gradle/libs.versions.toml | 13 ++++++++++ 8 files changed, 64 insertions(+) create mode 100644 app/src/main/kotlin/com/ninecraft/booket/initializer/FirebaseCrashlyticsInitializer.kt create mode 100644 build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dbcc91a3..6637bd62 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -6,6 +6,7 @@ plugins { alias(libs.plugins.booket.android.application) alias(libs.plugins.booket.android.application.compose) alias(libs.plugins.booket.android.hilt) + alias(libs.plugins.booket.android.firebase) } android { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 89d5d930..99ef021f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -36,6 +36,10 @@ android:name="com.ninecraft.booket.initializer.KakaoSdkInitializer" android:value="androidx.startup" /> + + { + override fun create(context: Context) { + FirebaseCrashlytics.getInstance().isCrashlyticsCollectionEnabled = !BuildConfig.DEBUG + } + + override fun dependencies(): List>> { + return emptyList() + } +} diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index e5672e16..8322598d 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -19,6 +19,7 @@ gradlePlugin { "android.library" to "AndroidLibraryConventionPlugin", "android.library.compose" to "AndroidLibraryComposeConventionPlugin", "android.feature" to "AndroidFeatureConventionPlugin", + "android.firebase" to "AndroidFirebaseConventionPlugin", "android.hilt" to "AndroidHiltConventionPlugin", "android.retrofit" to "AndroidRetrofitConventionPlugin", "jvm.library" to "JvmLibraryConventionPlugin", diff --git a/build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt b/build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt new file mode 100644 index 00000000..fa0b0972 --- /dev/null +++ b/build-logic/src/main/kotlin/AndroidFirebaseConventionPlugin.kt @@ -0,0 +1,25 @@ + +import com.ninecraft.booket.convention.Plugins +import com.ninecraft.booket.convention.applyPlugins +import com.ninecraft.booket.convention.implementation +import com.ninecraft.booket.convention.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies + +internal class AndroidFirebaseConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + applyPlugins( + Plugins.GOOGLE_SERVICES, + Plugins.FIREBASE_CRASHLYTICS, + ) + + dependencies { + implementation(platform(libs.firebase.bom)) + implementation(libs.firebase.analytics) + implementation(libs.firebase.crashlytics) + } + } + } +} diff --git a/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt b/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt index ac166120..e525f7b6 100644 --- a/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt +++ b/build-logic/src/main/kotlin/com/ninecraft/booket/convention/Plugins.kt @@ -13,4 +13,6 @@ object Plugins { const val HILT = "dagger.hilt.android.plugin" const val KSP = "com.google.devtools.ksp" + const val GOOGLE_SERVICES = "com.google.gms.google-services" + const val FIREBASE_CRASHLYTICS = "com.google.firebase.crashlytics" } diff --git a/build.gradle.kts b/build.gradle.kts index c9b7344c..63b471a7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,6 +13,8 @@ plugins { alias(libs.plugins.android.library) apply false alias(libs.plugins.hilt) apply false alias(libs.plugins.ksp) apply false + alias(libs.plugins.google.service) apply false + alias(libs.plugins.firebase.crashlytics) apply false } val excludeModules: String? by project diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7f237335..1260f8aa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -67,6 +67,11 @@ kotlin-ktlint-source = "0.50.0" androidx-test-ext-junit = "1.2.1" androidx-test-runner = "1.6.2" +## Firebase +google-service = "4.4.3" +firebase-bom = "33.16.0" +firebase-crashlytics = "3.0.4" + [libraries] android-gradle-plugin = { group = "com.android.tools.build", name = "gradle", version.ref = "android-gradle-plugin" } kotlin-gradle-plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } @@ -137,6 +142,10 @@ google-mlkit-text-recognition-korean = { group = "com.google.mlkit", name = "tex androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" } androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidx-test-runner" } +firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebase-bom" } +firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics-ktx" } +firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics-ktx" } + [plugins] gradle-dependency-handler-extensions = { id = "land.sungbin.dependency.handler.extensions", version.ref = "gradle-dependency-handler-extensions" } @@ -155,6 +164,9 @@ kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } +google-service = { id = "com.google.gms.google-services", version.ref = "google-service" } +firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" } + # Plugins defined by this project booket-android-application = { id = "booket.android.application", version = "unspecified" } booket-android-application-compose = { id = "booket.android.application.compose", version = "unspecified" } @@ -162,6 +174,7 @@ booket-android-library = { id = "booket.android.library", version = "unspecified booket-android-library-compose = { id = "booket.android.library.compose", version = "unspecified" } booket-android-retrofit = { id = "booket.android.retrofit", version = "unspecified" } booket-android-feature = { id = "booket.android.feature", version = "unspecified" } +booket-android-firebase = { id = "booket.android.firebase", version = "unspecified" } booket-android-hilt = { id = "booket.android.hilt", version = "unspecified" } booket-jvm-library = { id = "booket.jvm.library", version = "unspecified" } booket-kotlin-library-serialization = { id = "booket.kotlin.library.serialization", version = "unspecified" } From e289f2432fe2529ce8237c9528ab6c1515e6e579 Mon Sep 17 00:00:00 2001 From: easyhooon Date: Tue, 5 Aug 2025 00:53:24 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[BOOK-202]=20feat:=20CI=20=EB=82=B4?= =?UTF-8?q?=EC=97=90=20Generate=20google-services.json=20step=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index fd9210f0..b5d875c7 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -39,6 +39,9 @@ jobs: run: | echo '${{ secrets.LOCAL_PROPERTIES }}' >> ./local.properties + - name: Generate google-services.json + run: echo '${{ secrets.GOOGLE_SERVICES }}' | base64 -d > ./app/google-services.json + - name: Code style checks run: | ./gradlew ktlintCheck detekt