Sobes.tech
Middle

როგორ შევქმნათ და შევცვალოთ Dagger Hilt Android პროგრამაში?

sobes.tech AI

პასუხი AI-სგან

  1. დამოკიდებულებების დამატება build.gradle (Project)-ში:
// პროექტის დონეზე build.gradle
buildscript {
    ext {
        hilt_version = '2.48' // გამოიყენეთ Hilt-ის აქტუალური ვერსია
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
        // ... სხვა დამოკიდებულებები
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        // ... სხვა რეპოზიტორები
    }
}
  1. დამოკიდებულებების დამატება build.gradle (Module)-ში:
// აპლიკაციის დონეზე build.gradle
plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt' // 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" // არჩევითი, Android-სპეციფიკური Hilt გაფართოებისთვის
    // ... სხვა დამოკიდებულებები
}
  1. ძირითადი აპლიკაციის კლასი შექმნა @HiltAndroidApp ანოტაციით:
// MyAndroidApp.kt
import android.app.Application
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
class MyAndroidApp : Application() {
    // დამატებითი ინიციალიზაცია საჭიროების მიხედვით
}
  1. შექმნილი კლასი დარეგისტრირება AndroidManifest.xml-ში:
<!-- AndroidManifest.xml -->
<application
    android:name=".MyAndroidApp"
    ...>
    <!-- ... -->
</application>
  1. Android კომპონენტების (Activity, Fragment, Service და ა.შ.) ანოტაცია @AndroidEntryPoint-ით:
// MyActivity.kt
import androidx.appcompat.app.AppCompatActivity
import dagger.hilt.android.AndroidEntryPoint

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

ახლა Hilt-ი მზად არის გამოყენებისთვის, რათა ინექცია განახორციელოს ანოტირებული კლასებში. შეგიძლიათ შექმნათ მოდულები (@Module), უზრუნველყოთ დამოკიდებულებები (@Provides ან @Binds) მოდულებში და ინექცია განახორციელოთ @Inject-ის საშუალებით.

მოდულის მაგალითი:

// 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) // მოდულის ინსტალაცია აპლიკაციის სქოპში
object NetworkModule {

    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            // ... Retrofit-ის კონფიგურაცია
            .build()
    }

    // სხვა დამოკიდებულებების მიწოდება
}

დამოკიდებულების ინექციის მაგალითი:

// 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 // Retrofit-ის დამოკიდებულების ინექცია

    // ... retrofit-ის გამოყენება
}