현재 프로젝트를 진행하면서, 사용자 행동을 분석하기 위해 analytics와 비정상 종료를 분석하기 위해 Crashlytics를 도입하려고 한다.
app 모듈단에서는 쉽게 적용 가능하였지만 멀티 모듈을 적용하면서 에러들을 만나 가이드를 보고 천천히 따라 해보려고 한다.
왜 app 모듈에서 쓰지 않는가?
이런 문제점을 타파하고자 호기롭게 analytics 모듈을 만들어 분리하였다.
다만 빌드 오류가 너무 많이 나서.. 해결 과정을 기록하고자 한다

plugins {
// Make sure that you have the Google services Gradle plugin dependency
id("com.google.gms.google-services") version "4.4.0" apply false
// Add the dependency for the Crashlytics Gradle plugin
id("com.google.firebase.crashlytics") version "2.9.9" apply false
}
plugins {
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
}
...
dependencies {
implementation(project(":core:analytics"))
}
plugins {
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
}
...
dependencies {
implementation(platform("com.google.firebase:firebase-bom:32.7.1"))
implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-analytics")
}
싱글톤 컴포넌트로 Hilt 주입을 하려고 했는데, composable(화면)단에서 Inject를 할 수 있는 좋은 방법이 생각이 안났다.
구글링 하였을 때, 3가지 방안이 있었는데,
1. Hilt의 EntryPoints 활용
2. CompositionLocal
3. (처음 생각) object로 선언해서 사용한다
싱글톤 방식으로 작동가능하게 만들 수 있다.
이 경우 test 하기 어려운 구조이고, object는 의존성 주입을 제공하지 않아 확장성이 떨어질 것이라고 생각했다.
NowInAndroid에서 2번 방식을 채택하고 있었다.
내 생각은 조금 달랐는데, 그 이유로 1번을 선택하면 아래와 같은 장점이 있었다.
그래서 한 번 1번 방식으로 제안을 해보았다.
결론은 2번 구조인 Now In Android 구조가 낫다라는 결론이다.
한 분이 내가 제안한 방식에 대해서 질문을 주셨는데 이를 명쾌한 해답을 낼 수 없었다.
EntryPoint로 Hilt 객체를 꺼내올 때의 비용이 발생한다. 어떻게 해결할 수 있나?
Compose Preview에서 DI 객체를 쓰기 어렵다 어떻게 해결할 수 있나?
CompositionLocal을 통해서 FirebaseAnalytics 객체를 관리하여 쓰자
Now In Android Analytics 패키지