Sobes.tech
Middle

Comment créer et configurer Dagger Hilt dans une application Android ?

sobes.tech IA

Réponse de l'IA

  1. Ajout des dépendances dans build.gradle (Project) :
// build.gradle au niveau du projet
buildscript {
    ext {
        hilt_version = '2.48' // Utilisez la version actuelle de Hilt
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
        // ... autres dépendances
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        // ... autres dépôts
    }
}
  1. Ajout des dépendances dans build.gradle (Module) :
// build.gradle au niveau du module
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt' // Pour la génération de code Kapt
    id 'dagger.hilt.android.plugin'
}

android {
    // ...
}

dependencies {
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-compiler:$hilt_version"
    kapt "androidx.hilt:hilt-compiler:1.0.0" // Optionnel, pour les extensions spécifiques à Android de Hilt
    // ... autres dépendances
}
  1. Création de la classe principale de l'application avec l'annotation @HiltAndroidApp :
// MyAndroidApp.kt
import android.app.Application
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class MyAndroidApp : Application() {
    // Initialisation supplémentaire si nécessaire
}
  1. Enregistrement de la classe dans AndroidManifest.xml :
<!-- AndroidManifest.xml -->
<application
    android:name=".MyAndroidApp"
    ...>
    <!-- ... -->
</application>
  1. Annotation des composants Android (Activity, Fragment, Service, etc.) avec @AndroidEntryPoint :
// MyActivity.kt
import androidx.appcompat.app.AppCompatActivity
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MyActivity : AppCompatActivity() {
    // ...
}

Hilt est maintenant prêt à être utilisé pour l'injection de dépendances dans les classes annotées. Ensuite, vous pouvez créer des modules (@Module), fournir des dépendances (@Provides ou @Binds) dans les modules, et les injecter dans les composants avec @Inject.

Exemple de module :

// NetworkModule.kt
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class) // Installation du module dans le scope de l'application
object NetworkModule {

    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            // ... configuration de Retrofit
            .build()
    }

    // Autres provisions de dépendances
}

Exemple d'injection de dépendance :

// MyActivity.kt
import androidx.appcompat.app.AppCompatActivity
import dagger.hilt.android.AndroidEntryPoint
import retrofit2.Retrofit
import javax.inject.Inject

@AndroidEntryPoint
class MyActivity : AppCompatActivity() {

    @Inject
    lateinit var retrofit: Retrofit // Injection de la dépendance Retrofit

    // ... utilisation de retrofit
}