在 Android 应用中利用 Hilt

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499


依赖注入(DI,Dependency Injection)是当代 Android 开发中提高代码可维护性和可测试性的紧张工具。Hilt 是 Google 推出的一个基于 Dagger 的依赖注入框架,它简化了 DI 在 Android 应用中的利用。
在本文中,我们将详细先容如何在 Android 项目中利用 Hilt,包罗其基本概念、利用方式以及一些进阶用法。
1. 为什么利用 Hilt?

在 Android 应用开发中,随着项目规模的增长,类之间的依赖关系会变得复杂。如果手动管理依赖,会导致代码耦合度过高,不利于测试和维护。而 Hilt 通过注解和自动天生代码的方式帮助我们管理依赖关系,使得代码更加清楚、可复用。
2. 配置 Hilt

首先,我们必要在项目中添加 Hilt 依赖。
步骤 1:修改 build.gradle.kts(Project 级别)
  1. plugins {
  2.      id("com.google.dagger.hilt.android") version "2.48" apply false
  3. }
复制代码
步骤 2:修改 build.gradle.kts(App 级别)
  1. plugins {
  2.      id("com.android.application")
  3.      id("org.jetbrains.kotlin.android")
  4.      id("com.google.dagger.hilt.android")
  5. }
  6. dependencies {
  7.      implementation("com.google.dagger:hilt-android:2.48")
  8.      kapt("com.google.dagger:hilt-android-compiler:2.48")
  9. }
  10. android {
  11.      compileOptions {
  12.          sourceCompatibility(JavaVersion.VERSION_17)
  13.          targetCompatibility(JavaVersion.VERSION_17)
  14.      }
  15. }
复制代码
步骤 3:在 Application 类中启用 Hilt
  1. @HiltAndroidApp
  2. class MyApp : Application()
复制代码
这一步告诉 Hilt 这个应用必要利用依赖注入,并在应用的生命周期中举行初始化。
3. 利用 Hilt 举行依赖注入

Hilt 主要利用 @Inject 和 @Module 注解来提供依赖。
(1)利用 @Inject 直接注入依赖
  1. class Engine @Inject constructor() {
  2.      fun start() = "引擎启动..."
  3. }
复制代码
(2)在 Activity 或 Fragment 中利用 Hilt
  1. @AndroidEntryPoint
  2. class MainActivity : AppCompatActivity() {
  3.      @Inject lateinit var engine: Engine
  4.      override fun onCreate(savedInstanceState: Bundle?) {
  5.          super.onCreate(savedInstanceState)
  6.          setContentView(R.layout.activity_main)
  7.          println(engine.start())
  8.      }
  9. }
复制代码
(3)利用 @Module 和 @Provides 提供依赖
  1. @Module
  2. @InstallIn(SingletonComponent::class)
  3. object AppModule {
  4.      @Provides
  5.      fun provideEngine(): Engine {
  6.          return Engine()
  7.      }
  8. }
复制代码
4. 进阶用法

(1)在 ViewModel 中利用 Hilt
  1. @HiltViewModel
  2. class MyViewModel @Inject constructor(
  3.      private val engine: Engine
  4. ) : ViewModel() {
  5.      fun startEngine() = engine.start()
  6. }
复制代码
(2)在 Repository 中利用 Hilt
  1. class Repository @Inject constructor(private val apiService: ApiService) {
  2.      fun fetchData(): String {
  3.          return apiService.getData()
  4.      }
  5. }
复制代码
(3)测试中的依赖注入
  1. @HiltAndroidTest
  2. @RunWith(AndroidJUnit4::class)
  3. class MyTest {
  4.      @get:Rule
  5.      var hiltRule = HiltAndroidRule(this)
  6.      @Inject
  7.      lateinit var repository: Repository
  8.      @Test
  9.      fun testFetchData() {
  10.          assert(repository.fetchData() == "测试数据")
  11.      }
  12. }
复制代码
5. 结论

通过 Hilt,我们可以轻松管理 Android 应用中的依赖关系,淘汰代码耦合,提高代码的可维护性和可测试性。掌握 Hilt 的基本利用方法后,你可以结合自己的业务场景,灵活地利用 Hilt 举行依赖注入,让代码更加清楚、优雅!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表