Hilt的作用

Hilt是Dagger的最强辅助

  • Hilt简化了Dagger使用,大量减少了使用Dagger时编写的模板代码
  • Hilt提供一套标准组件和作用域注解:不必再自定义组件和作用域。
  • Hilt提供几种预定义的的绑定(提供对象实例的获取称为绑定):如Application和Activity。
  • Hilt提供集中预定义的限定符(Qualifier): @ApplicationContext和@ActivityContext。

添加依赖项

首先,将hilt-android-gradle-plugi添加到Project级的build.gradle文件中:

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

然后,应用 Gradle 插件并在 app/build.gradle 文件中添加以下依赖项:

plugins {
kotlin("kapt") //报错的话使用 id 'kotlin-kapt'
id("com.google.dagger.hilt.android")
}

android {
...
}

dependencies {
implementation("com.google.dagger:hilt-android:2.44")
kapt("com.google.dagger:hilt-android-compiler:2.44")
}

// Allow references to generated code
kapt {
correctErrorTypes = true
}

Hilt 使用 Java 8 功能。如需在项目中启用 Java 8,请将以下代码添加到 app/build.gradle 文件中:

android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}

Hilt 应用类

所有使用 Hilt 的应用都必须包含一个带有 @HiltAndroidApp 注解的 Application 类。

@HiltAndroidApp 会触发 Hilt 的代码生成操作,生成的代码包括应用的一个基类,该基类充当应用级依赖项容器。

@HiltAndroidApp
class App: Application() { ... }

生成的这一 Hilt 组件会附加到 Application 对象的生命周期,并为其提供依赖项。此外,它也是应用的父组件,这意味着,其他组件可以访问它提供的依赖项。

将依赖项注入 Android 类

Application 类中设置了 Hilt 且有了应用级组件后,Hilt 可以为带有 @AndroidEntryPoint 注解的其他 Android 类提供依赖项:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() { ... }

Hilt 目前支持以下 Android 类:

  • Application(通过使用 @HiltAndroidApp
  • ViewModel(通过使用 @HiltViewModel
  • Activity
  • Fragment
  • View
  • Service
  • BroadcastReceiver

如果您使用 @AndroidEntryPoint 为某个 Android 类添加注解,则还必须为依赖于该类的 Android 类添加注解。例如,如果您为某个 fragment 添加注解,则还必须为使用该 fragment 的所有 activity 添加注解。

注意:在 Hilt 对 Android 类的支持方面适用以下几项例外情况:

  • Hilt 仅支持扩展 ComponentActivity 的 activity,如 AppCompatActivity
  • Hilt 仅支持扩展 androidx.Fragment 的 Fragment。
  • Hilt 不支持保留的 fragment。

@AndroidEntryPoint 会为项目中的每个 Android 类生成一个单独的 Hilt 组件。这些组件可以从它们各自的父类接收依赖项,如组件层次结构中所述。