Android Hilt

Zeynep Türker
HardwareAndro
Published in
2 min readApr 25, 2023

Herkese Merhaba, bu yazımda sizlere Androidde Hilt’in ne olduğunu ve kullanımından bahsedeceğim. Umarım faydalı olur.

Öncellikle Dependency Injection denilince akla Hilt ve Dagger gelir. Peki nedir bu dependecy Injection?

Dependency Injection, bir sınıfın başka bir sınıfa bağlı olmamasını yani başka bir sınıftaki değişikliklerden etkilenmesini engeller. Bu sayede kodumuzun bakımını ve testini daha kolay bir şekilde yapabiliriz. Hilt ve Dagger ise bu bağlılığı azaltmak için kullanılan frameworklerdir.

Hilt’i nasıl kullanırız?

Basit bir hesap makinesi uygulaması ile Hilt’i kullanalım.

Koda başlarken öncellikle build.gradle dosyalarına aşağıdaki satırları eklemeliyiz.

build.gradle(project)

plugins {
...
id 'com.google.dagger.hilt.android' version "2.44" apply false
}

build.gradle(module)

plugins {
...
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
dependencies {
...
implementation 'com.google.dagger:hilt-android:2.44'
kapt 'com.google.dagger:hilt-android-compiler:2.44'
}

Projede Hilt’in kullanımını sağlayabilmek için yani Hilt’in componentlerini enjekte edebilmek için @HiltAndroidApp anotasyonunu kullanırız.

@HiltAndroidApp
class CalculatorApp: Application() {}

Manifest dosyasındaki application kısmına bu dosyayı eklemeyi unutmayalım.

<application
android:name=".CalculatorApp"

...

</application>

Toplama, çıkarma, çarpma ve bölme işlemlerinin bulunduğu bir MathOperation isimli bir sınıf yazalım.

class MathOperation {
fun add(num1: Int, num2: Int): Int = num1 + num2
fun subtract(num1: Int, num2: Int): Int = num1 - num2
fun multiply(num1: Int, num2: Int): Int = num1 * num2
fun divide(num1: Int, num2: Int): Double = num1 / num2.toDouble()
}

Bu sınıfın kullanıldığı Calculator sınıfını yazalım. Calculator sınıfı MathOperation sınıfına bağımlıdır. @Inject anotasyonu, sınıfın hangi parametrelere bağımlı olduğunu söyler.

class Calculator @Inject constructor(var mathOperation: MathOperation) {
fun add(num1: Int, num2: Int): Int = mathOperation.add(num1, num2)
fun subtract(num1: Int, num2: Int): Int = mathOperation.subtract(num1, num2)
fun multiply(num1: Int, num2: Int): Int = mathOperation.multiply(num1, num2)
fun divide(num1: Int, num2: Int): Double = mathOperation.divide(num1, num2)
}

MathOperation sınıfının nesnesine Module sınıfımız ile ulaşırız. @Singleton anotasyonu ile objenin bir kere oluşturulması sağlanır.

@Module
@InstallIn(SingletonComponent::class)
class MathOperationModule {
@Provides
@Singleton
fun provideMathOperation(): MathOperation {
return MathOperation()
}
}

Şimdi Calculator sınıfımızı MainActivity class ımızın içinde oluşturup örnekler yapalım.

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
val TAG = "Calculator"
@Inject lateinit var calculator: Calculator

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

Log.d(TAG, "5 + 4 = " + calculator.add(5, 4).toString())
Log.d(TAG, "5 - 4 = " + calculator.subtract(5, 4).toString())
Log.d(TAG, "5 * 4 = " + calculator.multiply(5, 4).toString())
Log.d(TAG, "5 / 4 = " + calculator.divide(5, 4).toString())
}
}

@AndroidEntryPoint anotasyonu, bağımlılıklarımızın otomatik olarak belirlenmesini sağlar. Bu sayede Calculator objesini oluştururken MathOperation objesini oluşturmamız gerekmedi. Arka planda Hilt componenti bu objeyi kendi oluşturarak Calculator nesnesinin oluşmasını sağladı.

Kodumuzun çıktısı bu şekildedir.

D/Calculator: 5 + 4 = 9
D/Calculator: 5 - 4 = 1
D/Calculator: 5 * 4 = 20
D/Calculator: 5 / 4 = 1.25

Özetle Hilt, dependency injection’ı uygulayabileceğimiz bir kütüphanedir. Hilt sayesinde kod fazlalığından kurtulup daha düzenli bir kod yapısı oluşturabiliriz.

--

--