Android Hilt 入门使用实战

 更新时间:2025年11月13日 14:39:20   作者:stevenzqzq  
文章详细讲解了Hilt的基本使用,包括添加依赖、初始化、在Activity/Fragment和ViewModel中使用Hilt,以及创建Hilt模块和管理作用域,通过一个实战示例,展示了如何使用Hilt进行依赖注入,感兴趣的朋友跟随小编一起看看吧

一 Android Hilt 入门教程实战

Hilt 是 Android 官方推荐的 依赖注入框架,它基于 Dagger,简化了依赖管理,适用于 MVVM 架构,提高了代码的可维护性。

1️⃣ 为什么要用 Hilt?

在 Android 开发中,们通常需要手动创建和管理对象,例如 ViewModelRepositoryRetrofit 等。Hilt 可以自动管理这些对象的创建和生命周期,让们专注于业务逻辑,而不是手动实例化对象。

Hilt 的优点:
✔️ 自动管理依赖,避免手动创建实例
✔️ ViewModel 支持,与 Jetpack 组件无缝集成
✔️ 作用域管理,不同组件(Activity、Fragment)能获得合适的对象
✔️ 简化 Dagger 依赖注入,代码更简洁

2️⃣ Hilt 的基本使用

📌(1)添加 Hilt 依赖

与第一点相同

plugins {
    id("com.android.application")
    id("kotlin-android")
    id("kotlin-kapt")
    id("com.google.dagger.hilt.android")
}
android {
    namespace 'com.test.hiltstudy'
    compileSdk 35
    defaultConfig {
        applicationId "com.test.hiltstudy"
        minSdk 24
        targetSdk 35
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}
//// Allow references to generated code
//kapt {
//    correctErrorTypes true
//}
dependencies {
    implementation libs.androidx.core.ktx
    implementation libs.androidx.appcompat
    implementation libs.material
    implementation libs.androidx.activity
    implementation libs.androidx.constraintlayout
    testImplementation libs.junit
    androidTestImplementation libs.androidx.junit
    androidTestImplementation libs.androidx.espresso.core
    // Hilt Dependencies
    implementation("com.google.dagger:hilt-android:2.51.1")
    kapt("com.google.dagger:hilt-android-compiler:2.51.1")
    // Fragment KTX for viewModels() delegate
    implementation("androidx.fragment:fragment-ktx:1.6.2")
    // ViewModel
//    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
//    implementation("androidx.activity:activity-ktx:1.8.1")
//retrofit
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
}

📌(2)初始化 Hilt

AndroidManifest.xml

<application
    android:name=".MyApplication"
    ...>
</application>

然后创建 MyApplication.kt

@HiltAndroidApp
class MyApplication : Application()

🔹 @HiltAndroidApp 用于初始化 Hilt,它会在 App 启动时配置依赖注入。

📌(3)在 Activity/Fragment 使用 Hilt

在 Activity 里启用 Hilt
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject
    lateinit var someClass: SomeClass  // 自动注入
}

🔹 @AndroidEntryPoint 标记 Activity 以支持 Hilt
🔹 @Inject lateinit var someClass: SomeClass 直接注入对象

在 Fragment 里启用 Hilt
@AndroidEntryPoint
class MainFragment : Fragment() {
    @Inject
    lateinit var someRepository: SomeRepository
}

💡 Activity 和 Fragment 都必须加 @AndroidEntryPoint 才能使用 Hilt 注入的对象!

📌(4)在 ViewModel 里使用 Hilt

@HiltViewModel
class MainViewModel @Inject constructor(
    private val repository: SomeRepository
) : ViewModel() {
    fun fetchData() = repository.getData()
}

ActivityFragment 里:

private val viewModel: MainViewModel by viewModels()

🔹 Hilt 自动创建 MainViewModel,不用 ViewModelProvider 手动实例化。

📌(5)创建 Hilt 模块(Module)

如果 SomeRepository 不能用 @Inject 直接构造,比如 Retrofit,们需要 使用 Module 提供实例

@Module
@InstallIn(SingletonComponent::class) // 作用于整个应用生命周期
object AppModule {
    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://api.example.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
    @Provides
    @Singleton
    fun provideApiService(retrofit: Retrofit): ApiService {
        return retrofit.create(ApiService::class.java)
    }
}

🔹 @Module 标记为 Hilt 模块
🔹 @Provides 提供依赖
🔹 @Singleton 表示单例

3️⃣ Hilt 作用域

作用域说明示例
@Singleton全局单例,应用级共享Retrofit、数据库
@ActivityScoped只在 Activity 里共享共享 ViewModel
@ViewModelScoped只在 ViewModel 里共享Repository

4️⃣ Hilt 实战示例

1️⃣ 创建一个 Repository

class SomeRepository @Inject constructor() {
    fun getData(): String = "Hello from Repository"
}

2️⃣ 在 ViewModel 里注入

@HiltViewModel
class MainViewModel @Inject constructor(
    private val repository: SomeRepository
) : ViewModel() {
    fun fetchData(): String = repository.getData()
}

3️⃣ 在 Activity 里获取数据

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    private val viewModel: MainViewModel by viewModels()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<TextView>(R.id.textView).text = viewModel.fetchData()
    }
}

✅ 运行后,TextView 显示 "Hello from Repository" 🎉

5️⃣ 总结

🔹 @HiltAndroidApp 让应用支持 Hilt
🔹 @AndroidEntryPoint 用于 Activity/Fragment
🔹 @HiltViewModel 用于 ViewModel
🔹 @Inject 直接注入类实例
🔹 @Module + @Provides 提供无法直接注入的对象(如 Retrofit)
🔹 @Singleton@ActivityScoped 控制对象生命周期

Hilt 让 依赖注入变得简单高效,可以自动管理对象,提升代码的可维护性。

参考

google Hilt 教程

到此这篇关于Android Hilt 入门教程_实战的文章就介绍到这了,更多相关Android Hilt 入门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android切面编程入门讲解

    Android切面编程入门讲解

    这篇文章给大家分享了关于Android进阶资深开发必备技能-切面编程入门的相关知识点内容,有兴趣的朋友们参考下。
    2018-08-08
  • flutter FadeTransition实现透明度渐变动画

    flutter FadeTransition实现透明度渐变动画

    这篇文章主要为大家详细介绍了flutter FadeTransition实现透明度渐变动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Flutter 日历组件简单实现

    Flutter 日历组件简单实现

    这篇文章主要为大家介绍了Flutter 日历组件简单实现的图文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Android基于方法池与回调实现登录拦截的场景

    Android基于方法池与回调实现登录拦截的场景

    这篇文章主要为大家介绍了Android基于方法池与回调实现登录拦截的场景详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Android实现显示和隐藏密码功能的示例代码

    Android实现显示和隐藏密码功能的示例代码

    在前端中我们知道用javascript就可以可以很容易实现密码的显示与隐藏,本文将大家详细介绍Android是如何实现显示和隐藏密码功能的,需要的可以参考一下
    2022-06-06
  • Android6.0开发中屏幕旋转原理与流程分析

    Android6.0开发中屏幕旋转原理与流程分析

    这篇文章主要介绍了Android6.0开发中屏幕旋转原理与流程,结合实例形式详细分析了Android6.0屏幕旋转的原理与相关实现流程,并附带了Android动态开启与禁用屏幕旋转的实现方法,需要的朋友可以参考下
    2017-11-11
  • Android ListView获得选项中的值

    Android ListView获得选项中的值

    本篇文章主要介绍Android ListView,在Android开发过程中经常会用到ListView 组件并有监听事件,这里给大家一个简单实例,来说明如何得到ListView选项中的值
    2016-07-07
  • Android PopupWindow实现左侧弹窗效果

    Android PopupWindow实现左侧弹窗效果

    这篇文章主要为大家详细介绍了Android PopupWindow实现左侧弹窗效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 8种android 对话框(Dialog)使用方法详解

    8种android 对话框(Dialog)使用方法详解

    这篇文章主要介绍了8种android 对话框(Dialog)使用方法。感兴趣的朋友可以参考一下
    2016-03-03
  • Android Bitmap的截取及状态栏的隐藏和显示功能

    Android Bitmap的截取及状态栏的隐藏和显示功能

    Bitmap是Android系统中的图像处理中最重要类之一。Bitmap可以获取图像文件信息,对图像进行剪切、旋转、缩放,压缩等操作,并可以以指定格式保存图像文件。这篇文章主要介绍了Android Bitmap的截取及状态栏的隐藏和显示功能,需要的朋友可以参考下
    2017-11-11

最新评论