安装与配置Hilt:Gradle依赖、Application注解
说实话,搞 Android 依赖注入,第一步就是搭环境。这一步看起来没什么含量,但我在项目里踩过坑——依赖版本对不上、Kapt 忘了加、Application 没注解,结果编译死活过不去。你想想看,要是连门都进不去,后面排查 UI 开销还从何谈起?
这一章我们只做三件事:配 Gradle、写 Application 注解、验证配置。简单,但必须准。
Gradle 依赖配置
Hilt 是基于 Dagger 的官方 DI 方案。它的依赖管理相比 Dagger 更轻量,但该配的东西一样不能少。
我个人习惯,先把整个项目的 build.gradle(项目根)和 build.gradle(模块级)分开看。因为 Hilt 需要同时动这两层。
1. 项目级 build.gradle
在根 build.gradle 的 buildscript 或 plugins 块里,声明 Hilt Gradle 插件。如果你用新版 Android Gradle Plugin(AGP 7.0+),推荐用 plugins 声明式写法。
// 项目根 build.gradle
plugins {
id 'com.google.dagger.hilt.android' version '2.51' apply false
}
嗯,注意这里。版本号必须和 Hilt 核心库保持一致。我见过有人插件用 2.44,核心库用 2.51,结果编译报错说注解处理器找不到。所以记住:插件版本 = 核心库版本。
2. 模块级 build.gradle
应用 Hilt 插件,添加依赖。这里分两块:编译期需要的 Kapt 注解处理、运行时需要的库。
// app/build.gradle
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'com.google.dagger.hilt.android'
id 'kotlin-kapt' // Kapt 必须,否则注解不生效
}
android {
// ... 你的常规配置
}
dependencies {
implementation 'com.google.dagger:hilt-android:2.51'
kapt 'com.google.dagger:hilt-compiler:2.51'
// 如果你用 AndroidX 的 ViewModel,推荐加这个
implementation 'androidx.hilt:hilt-navigation-fragment:1.2.0'
}
| 依赖 | 作用 | 生命周期 |
|---|---|---|
| hilt-android | Hilt 运行时库,提供 @Inject、@HiltAndroidApp 等注解支持 | implementation |
| hilt-compiler | 注解处理器,生成 DI 代码 | kapt |
| hilt-navigation-fragment | Fragment 配合 Navigation 时自动注入 ViewModel | implementation |
我曾经在一个遗留项目里折腾过,Kotlin 1.6 配合 Hilt 2.44 跑得好好的,升级 Kotlin 1.9 后直接翻车。原因是 Kapt 的兼容性。后来我把 Hilt 升到 2.48+ 才稳住。
Application 注解配置
依赖配完,下一步就是告诉 Hilt:“嘿,这是我的 Application,你来接管。”这一步用 @HiltAndroidApp 搞定。
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
// 这里可以放一些初始化逻辑
}
}
看起来就这几行,但背后发生的事情不少。@HiltAndroidApp 会触发注解处理器,自动生成一个 Hilt_MyApplication 基类。它帮你管理了 Component 的生命周期,并且为后续 Activity、Fragment 的注入搭好舞台。
onCreate 里先打一条日志确认注入已生效。别小看这一步——后期排查 UI 渲染开销时,能看到注入时机是否滞后。
不要忘记 AndroidManifest
配了 Application 类,就必须在 AndroidManifest.xml 里声明它。否则系统不认。
<application
android:name=".MyApplication"
android:icon="@mipmap/ic_launcher"
... >
// 你的 Activity 声明
</application>
配置校验:我能不能开始写了?
配完这些,别急着写依赖注入代码。先验证一下环境是否真的搭好了。我的方法是三步走。
- Sync:Gradle Sync 必须通过,不能报未解析的依赖。
- Build:执行一次
./gradlew clean assembleDebug。如果编译成功,且没有 Kapt 相关的 warning,说明注解处理器跑通了。 - Run:装到模拟器上,看 Application 的
onCreate有没有跑起来。日志输出正常,就 ok。
kotlin-kapt 插件。没有 Kapt,Hilt 就不会生成任何代码,运行时空指针。我找了一个下午才发现少了这一行。
本章知识结构
下面这张图可以帮你理清 Hilt 配置阶段的完整依赖链。它展示了每个节点之间的先后顺序和依赖关系。
一个常见的坑:版本对齐
Hilt 2.44 之前和之后,Gradle 插件声明方式有细微变化。如果你还在用旧版 AGP,可能需要用 apply plugin 方式。我建议直接看官方 Release Note,别靠直觉猜版本。