41人参与 • 2025-11-13 • Android
hilt 是 android 官方推荐的 依赖注入框架,它基于 dagger,简化了依赖管理,适用于 mvvm 架构,提高了代码的可维护性。
在 android 开发中,们通常需要手动创建和管理对象,例如 viewmodel、repository、retrofit 等。hilt 可以自动管理这些对象的创建和生命周期,让们专注于业务逻辑,而不是手动实例化对象。
✅ hilt 的优点:
✔️ 自动管理依赖,避免手动创建实例
✔️ viewmodel 支持,与 jetpack 组件无缝集成
✔️ 作用域管理,不同组件(activity、fragment)能获得合适的对象
✔️ 简化 dagger 依赖注入,代码更简洁
与第一点相同
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")
}在 androidmanifest.xml:
<application
android:name=".myapplication"
...>
</application>然后创建 myapplication.kt:
@hiltandroidapp class myapplication : application()
🔹 @hiltandroidapp 用于初始化 hilt,它会在 app 启动时配置依赖注入。
@androidentrypoint
class mainactivity : appcompatactivity() {
@inject
lateinit var someclass: someclass // 自动注入
}🔹 @androidentrypoint 标记 activity 以支持 hilt
🔹 @inject lateinit var someclass: someclass 直接注入对象
@androidentrypoint
class mainfragment : fragment() {
@inject
lateinit var somerepository: somerepository
}💡 activity 和 fragment 都必须加 @androidentrypoint 才能使用 hilt 注入的对象!
@hiltviewmodel
class mainviewmodel @inject constructor(
private val repository: somerepository
) : viewmodel() {
fun fetchdata() = repository.getdata()
}在 activity 或 fragment 里:
private val viewmodel: mainviewmodel by viewmodels()
🔹 hilt 自动创建 mainviewmodel,不用 viewmodelprovider 手动实例化。
如果 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 表示单例
| 作用域 | 说明 | 示例 |
|---|---|---|
@singleton | 全局单例,应用级共享 | retrofit、数据库 |
@activityscoped | 只在 activity 里共享 | 共享 viewmodel |
@viewmodelscoped | 只在 viewmodel 里共享 | repository |
class somerepository @inject constructor() {
fun getdata(): string = "hello from repository"
}@hiltviewmodel
class mainviewmodel @inject constructor(
private val repository: somerepository
) : viewmodel() {
fun fetchdata(): string = repository.getdata()
}@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" 🎉
🔹 @hiltandroidapp 让应用支持 hilt
🔹 @androidentrypoint 用于 activity/fragment
🔹 @hiltviewmodel 用于 viewmodel
🔹 @inject 直接注入类实例
🔹 @module + @provides 提供无法直接注入的对象(如 retrofit)
🔹 @singleton、@activityscoped 控制对象生命周期
hilt 让 依赖注入变得简单高效,可以自动管理对象,提升代码的可维护性。
到此这篇关于android hilt 入门教程_实战的文章就介绍到这了,更多相关android hilt 入门内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论