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
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" }