⚡ Hilt 是 Google 官方基于 Dagger 打造的 Android 依赖注入库,专为 Android 开发简化 Dagger 的配置复杂度。它通过注解和编译期代码生成,自动管理对象依赖,让开发者告别手动创建工厂类。
在 Jetpack Compose 中,Hilt 提供 hiltViewModel() 等原生扩展,一行代码即可注入 ViewModel,完美契合声明式 UI。
🧬 Dagger 2
🧩 Hilt
ApplicationComponent 等标准组件@HiltAndroidApp、@AndroidEntryPoint 等注解💡 一句话: Hilt = Dagger 2 + Android 最佳实践 + 零模板配置。
| 优势 | 说明 | 适用场景 |
|---|---|---|
| 🚀 快速集成 | 仅需 @HiltAndroidApp + @AndroidEntryPoint 即可启用 | 新项目 / 老项目重构 |
| 🧪 编译期安全 | 依赖图在编译时校验,避免运行时崩溃 | 大型团队协作 |
| 📦 自动管理生命周期 | Component 随 Activity/Fragment 自动创建&销毁 | Android 四大组件 |
| 🧩 Compose 原生支持 | hiltViewModel() 直接注入 ViewModel | Compose 项目 |
| 🔌 模块化友好 | 支持多模块、延迟加载、限定符 | 中大型项目 |
✅ 典型适用场景
⚠️ 注意
⬆️ Hilt 自动桥接 Application → Activity → Compose ViewModel
// 1. Application 入口 @HiltAndroidApp class MyApplication : Application() // 2. Activity 入口 @AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val viewModel: MyViewModel = hiltViewModel() MyScreen(viewModel) } } } // 3. ViewModel 自动注入 Repository @HiltViewModel class MyViewModel @Inject constructor( private val repo: MyRepository ) : ViewModel() { ... } // 4. Repository 提供依赖 @Module @InstallIn(SingletonComponent::class) object AppModule { @Provides @Singleton fun provideApi(): MyApi = Retrofit.Builder()... }
🔍 使用 hiltViewModel() 无需手动传入 Factory,Hilt 自动处理依赖链。