Jetpack Compose에서 Hilt를 적용하는 방법에 대한 가이드라인을 찾아봐도 없다..
그래서 직접 경험해보고 만들어 보기로했다.
원래 프론트엔드 개발을 했으나 안드로이드 개발이 필요하여 1년도 안된 주니어 안드로이드개발자가 쓴 글이기때문에 많은 피드백이 필요할수도 있습니다.
// build.gradle (Module)
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
// build.gradle (Project)
buildscript {
ext {
...
hilt_version = "2.36"
}
dependencies {
...
classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
}
}
이 가이드라인대로 @HiltAndroidApp을 꼭 Application을 상속받은 앱에 적용해주어야 합니다.
jetpack compose에는 이것에 대한 가이드라인이 하나도 없습니다.
저는 MainActivity에 MainApplication 클래스를 생성하여 해결하였습니다.
@HiltAndroidApp
class MainApplication: Application() {
override fun onCreate() {
super.onCreate()
}
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent { ... }
}
}
Mainfest에 의 name attribute를 추가합니다.
<application
...
android:name=".MainApplication">
<activity
android:name=".MainActivity"
...>
...
</activity>
</application>
이제 Application의 시작은 MainApplication임을 알수 있고, @HiltAndroidApp도 지정할수 있게 되었습니다.
Jetpack compose로 프로젝트 생성시 Applcation을 상속받은 클래스가 없어 어떻게 다른방법이 있나 찾아보았었는데, 직접 만들어주면 되었습니다.
https://developer.android.com/reference/android/app/Application
전역 응용 프로그램 상태를 유지하기 위한 기본 클래스입니다.
Application은 Manifest.xml의 application 태그의 요소인 android:name을 지정해주면 사용할수 있습니다.
애플리케이션/패키지에 대한 프로세스가 생성될 때 다른 클래스보다 먼저 인스턴스화됩니다.
이제 Hilt요소들을 사용할수있다.