
Android에서 Hilt를 적용한다면 아래 Gradle 코드가 필요합니다. 만약 멀티 모듈로 프로젝트를 관리한다면 Hilt를 사용하는 모듈에 중복 코드가 생기게 됩니다. 🥲
dependencies {
implementation 'com.google.dagger:hilt-android:2.47'
kapt 'com.google.dagger:hilt-compiler:2.47'
// For instrumentation tests
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.47'
kaptAndroidTest 'com.google.dagger:hilt-compiler:2.47'
// For local unit tests
testImplementation 'com.google.dagger:hilt-android-testing:2.47'
kaptTest 'com.google.dagger:hilt-compiler:2.47'
}
kapt {
correctErrorTypes true
}
A Gradle plugin packages up reusable pieces of build logic, which can be used across many different projects and builds. Gradle allows you to implement your own plugins, so you can reuse your build logic, and share it with others.
Plugin이란 빌드에 관련된 로직(task, dependency...) 등을 모아서 재사용할 수 있게 도와주는 역할을 합니다.
org.jetbrains.kotlin.android, com.android.application 등 안드로이드에서 사용하는 Plugin이며 내부적으로 Android 빌드에 필요한 코드로 구성되어 있습니다.buildScript 형식으로 프로젝트 내부에서 사용할 수 있으며, 독립 형태로 만들어서 배포하여 프로젝트 외부에서도 사용할 수 있습니다.
settings.gradle.kts에 Gradle Plugin 프로젝트를 추가합니다.pluginManagement {
repositories {
includeBuild("build-logic")
}
}
build.gradle.kts, settings.gradle.kts를 생성합니다.프로젝트 구조
Project
- build-logic
- build.gradle.kts
- settings.gradle.kts
build.gradle.kts
com.google.dagger:hilt-android-gradle-plugin 같이 필요한 의존성을 추가합니다.plugins {
`kotlin-dsl`
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
dependencies {
}
settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
internal class HiltPlugin : Plugin<Project> {
override fun apply(target: Project) {
applyPlugin(target.pluginManager)
applyDependency(target.dependencies, target.getVersionCatalog())
applyKapt(target.extensions.getByType())
}
private fun applyPlugin(manager: PluginManager) = with(manager) {
apply("com.google.dagger.hilt.android")
apply("org.jetbrains.kotlin.kapt")
}
private fun applyDependency(handler: DependencyHandler, libs: VersionCatalog) = with(handler) {
implementation(libs.findLibrary("hilt-android").get())
kapt(libs.findLibrary("hilt-compiler").get())
}
private fun applyKapt(extension: KaptExtension) = with(extension) {
correctErrorTypes = true
}
}
build-logic 프로젝트 build.gradle.kts
gradlePlugin > plugins 에 Plugin을 등록합니다.implementationClass는 패키지까지 같이 등록합니다. ex) com.example.helloworld.HiltPlugingradlePlugin {
plugins {
register("플러그인_이름") {
id = "플로그인_아이디"
implementationClass = "플러그인_패키지"
}
}
}
모듈 build.gradle.kts
plugins {
id("플러그인_아이디")
}