Skip to content

Commit 592ddc1

Browse files
authored
Merge pull request #31 from avidraghav/feature/hilt-convention-plugin
Convention plugin for applying Hilt
2 parents adc88d7 + 797937c commit 592ddc1

File tree

10 files changed

+123
-48
lines changed

10 files changed

+123
-48
lines changed

app/build.gradle.kts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1+
@file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage")
2+
13
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
24

35
plugins {
4-
id("com.android.application")
5-
kotlin("android")
6-
id("org.jlleitschuh.gradle.ktlint")
7-
// Hilt doesn"t supports KSP yet
8-
kotlin("kapt")
9-
id("com.google.dagger.hilt.android")
10-
id("com.google.devtools.ksp")
6+
alias(libs.plugins.android.application)
7+
alias(libs.plugins.kotlin.android)
8+
alias(libs.plugins.ktlint)
9+
id("spacedawn.android.hilt")
10+
alias(libs.plugins.ksp)
1111
}
1212

1313
android {
@@ -104,9 +104,7 @@ dependencies {
104104
// Retrofit
105105
implementation(libs.bundles.retrofit)
106106

107-
// Hilt
108-
implementation(libs.hilt.android)
109-
kapt(libs.hilt.android.compiler)
107+
// Navigation with Hilt and Compose
110108
implementation(libs.hilt.navigation)
111109

112110
testImplementation(libs.test.junit)
@@ -119,7 +117,3 @@ dependencies {
119117
testImplementation(libs.google.truth)
120118
androidTestImplementation(libs.google.truth)
121119
}
122-
123-
kapt {
124-
correctErrorTypes = true
125-
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
@file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage")
2+
3+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
4+
5+
plugins {
6+
`kotlin-dsl`
7+
}
8+
9+
java {
10+
sourceCompatibility = JavaVersion.VERSION_17
11+
targetCompatibility = JavaVersion.VERSION_17
12+
}
13+
tasks.withType<KotlinCompile>().configureEach {
14+
kotlinOptions {
15+
jvmTarget = JavaVersion.VERSION_17.toString()
16+
}
17+
}
18+
19+
dependencies {
20+
compileOnly(libs.build.agp)
21+
compileOnly(libs.build.kotlin)
22+
}
23+
24+
gradlePlugin {
25+
plugins {
26+
register("androidHilt") {
27+
id = "spacedawn.android.hilt"
28+
implementationClass = "AndroidHiltConventionPlugin"
29+
}
30+
}
31+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.api.artifacts.VersionCatalogsExtension
5+
import org.gradle.kotlin.dsl.dependencies
6+
import org.gradle.kotlin.dsl.getByType
7+
import org.jetbrains.kotlin.gradle.plugin.KaptExtension
8+
9+
class AndroidHiltConventionPlugin : Plugin<Project> {
10+
override fun apply(project: Project) {
11+
with(project) {
12+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
13+
14+
pluginManager.apply(libs.findPlugin("hilt").get().get().pluginId)
15+
pluginManager.apply(libs.findPlugin("kapt").get().get().pluginId)
16+
17+
dependencies {
18+
"implementation"(libs.findLibrary("hilt.android").get())
19+
"kapt"(libs.findLibrary("hilt.android.compiler").get())
20+
}
21+
kapt().apply {
22+
correctErrorTypes = true
23+
}
24+
}
25+
}
26+
27+
private fun Project.kapt(): KaptExtension {
28+
return extensions.getByType(KaptExtension::class.java)
29+
}
30+
}

build-logic/gradle.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534
2+
org.gradle.parallel=true
3+
org.gradle.caching=true
4+
org.gradle.configureondemand=true

build-logic/settings.gradle.kts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
dependencyResolutionManagement {
2+
repositories {
3+
google()
4+
mavenCentral()
5+
}
6+
versionCatalogs {
7+
create("libs") {
8+
from(files("../gradle/libs.versions.toml"))
9+
}
10+
}
11+
}
12+
13+
rootProject.name = "build-logic"
14+
include(":convention")

build.gradle.kts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
@file:Suppress("DSL_SCOPE_VIOLATION")
2+
13
plugins {
2-
id("com.android.application") version "8.1.0" apply false
3-
id("com.android.library") version "8.1.0" apply false
4-
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
5-
id("org.jetbrains.kotlin.jvm") version "1.9.0" apply false
6-
id("org.jlleitschuh.gradle.ktlint") version "11.5.0"
7-
id("com.google.dagger.hilt.android") version "2.47" apply false
8-
id("com.google.devtools.ksp") version "1.9.0-1.0.13" apply false
4+
alias(libs.plugins.android.application) apply false
5+
alias(libs.plugins.android.library) apply false
6+
alias(libs.plugins.kotlin.android) apply false
7+
alias(libs.plugins.kotlin.jvm) apply false
8+
alias(libs.plugins.ktlint) apply false
9+
alias(libs.plugins.hilt) apply false
10+
alias(libs.plugins.ksp) apply false
911
}

data/build.gradle.kts

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
@file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage")
2+
13
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
24

35
plugins {
4-
id("com.android.library")
5-
kotlin("android")
6-
id("org.jlleitschuh.gradle.ktlint")
7-
id("com.google.devtools.ksp")
8-
kotlin("kapt")
9-
id("com.google.dagger.hilt.android")
6+
alias(libs.plugins.android.library)
7+
alias(libs.plugins.kotlin.android)
8+
alias(libs.plugins.ktlint)
9+
id("spacedawn.android.hilt")
10+
alias(libs.plugins.ksp)
1011
}
1112

1213
android {
@@ -61,16 +62,11 @@ dependencies {
6162

6263
implementation(libs.androidx.corektx)
6364
implementation(libs.androidx.appcompat)
64-
// implementation("com.google.android.material:material:1.5.0")
6565

6666
// Retrofit
6767
implementation(libs.bundles.retrofit)
6868
ksp(libs.moshi.codegen)
6969

70-
// Hilt
71-
implementation(libs.hilt.android)
72-
kapt(libs.hilt.android.compiler)
73-
7470
// Room
7571
implementation(libs.bundles.room)
7672
ksp(libs.room.compiler)
@@ -91,7 +87,3 @@ dependencies {
9187

9288
androidTestImplementation(libs.androidx.test.core)
9389
}
94-
95-
kapt {
96-
correctErrorTypes = true
97-
}

domain/build.gradle.kts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
@file:Suppress("DSL_SCOPE_VIOLATION", "UnstableApiUsage")
2+
13
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
24

35
plugins {
46
id("java-library")
5-
id("org.jetbrains.kotlin.jvm")
6-
id("com.google.devtools.ksp")
7-
id("org.jlleitschuh.gradle.ktlint")
7+
alias(libs.plugins.kotlin.jvm)
8+
alias(libs.plugins.ksp)
9+
alias(libs.plugins.ktlint)
810
}
911

1012
java {

gradle/libs.versions.toml

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ test_junit = "4.13.2"
4949
truth = "1.1.4"
5050
androidx_test_extensions = "1.1.3"
5151
androidx_test_core = "2.1.0"
52+
material = "1.10.0"
5253

5354
[libraries]
5455
# Project
@@ -90,8 +91,8 @@ hilt_work = { module = "androidx.hilt:hilt-work", version.ref = "hilt_work" }
9091
hilt_compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "hilt_compiler" }
9192

9293
# Coroutines
93-
coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
94-
coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" }
94+
coroutines_core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
95+
coroutines_test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines" }
9596

9697
# Coil
9798
coil = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
@@ -104,6 +105,9 @@ kotlin_immutable_collections = { module = "org.jetbrains.kotlinx:kotlinx-collect
104105
androidx_annotations = { module = "androidx.annotation:annotation", version = "1.6.0" }
105106
java_inject = { module = "javax.inject:javax.inject", version = "1" }
106107

108+
build_agp = { module = "com.android.tools.build:gradle", version.ref = "android_gradle_plugin" }
109+
build_kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
110+
107111
# Test
108112
test_junit = { module = "junit:junit", version.ref = "test_junit" }
109113
androidx_test_extensions = { module = "androidx.test.ext:junit", version.ref = "androidx_test_extensions" }
@@ -112,17 +116,18 @@ google_truth = { module = "com.google.truth:truth", version.ref = "truth" }
112116
androidx_test_core = { module = "androidx.arch.core:core-testing", version.ref = "androidx_test_core" }
113117
mockito_core = { module = "org.mockito:mockito-core", version = "5.3.1" }
114118
mockito_kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version = "5.0.0" }
119+
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
115120

116121
[plugins]
117122
android_application = { id = "com.android.application", version.ref = "android_gradle_plugin" }
118-
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
123+
kotlin_android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
119124
kotlin_jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
120-
ktlint_plugin = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }
121-
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
122-
hilt-plugin = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
123-
ksp-plugin = { id = "com.google.devtools.ksp", version.ref = "ksp" }
124-
android-library = { id = "com.android.library", version.ref = "android_gradle_plugin" }
125-
android-java-library = { id = "java-library", version.ref = "android_gradle_plugin" }
125+
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }
126+
kotlin_kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
127+
hilt= { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
128+
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
129+
kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
130+
android_library = { id = "com.android.library", version.ref = "android_gradle_plugin" }
126131

127132
[bundles]
128133
compose = ["compose-ui", "compose_graphics", "compose_tooling_preview", "material_3", "compose_lifecycle"]

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pluginManagement {
2+
includeBuild("build-logic")
23
repositories {
34
google()
45
mavenCentral()

0 commit comments

Comments
 (0)