Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > Android Hilt 入门

Android Hilt 入门使用实战

作者: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 入门内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文