北极熊与企鹅 發表於 2025-11-13 14:39:20

Android Hilt 入门使用实战

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>一 Android Hilt 入门教程实战</li><ul class="second_class_ul"><li>1️⃣ 为什么要用 Hilt?</li><li>2️⃣ Hilt 的基本使用</li><ul class="third_class_ul"><li>📌(1)添加 Hilt 依赖</li><li>📌(2)初始化 Hilt</li><li>📌(3)在 Activity/Fragment 使用 Hilt</li><li>📌(4)在 ViewModel 里使用 Hilt</li><li>📌(5)创建 Hilt 模块(Module)</li></ul><li>3️⃣ Hilt 作用域</li><ul class="third_class_ul"></ul><li>4️⃣ Hilt 实战示例</li><ul class="third_class_ul"><li>1️⃣ 创建一个 Repository</li><li>2️⃣ 在 ViewModel 里注入</li><li>3️⃣ 在 Activity 里获取数据</li></ul><li>5️⃣ 总结</li><ul class="third_class_ul"></ul></ul><li>参考</li><ul class="second_class_ul"></ul></ul></div><p class="maodian"></p><h2>一 Android Hilt 入门教程实战</h2>
<p>Hilt 是 Android 官方推荐的 <strong>依赖注入框架</strong>,它基于 Dagger,简化了依赖管理,适用于 MVVM 架构,提高了代码的可维护性。</p>
<p class="maodian"></p><h3>1️⃣ 为什么要用 Hilt?</h3>
<p>在 Android 开发中,们通常需要手动创建和管理对象,例如 <code>ViewModel</code>、<code>Repository</code>、<code>Retrofit</code> 等。Hilt 可以自动管理这些对象的创建和生命周期,让们专注于业务逻辑,而不是手动实例化对象。</p>
<p>✅ <strong>Hilt 的优点:</strong><br />✔️ <strong>自动管理依赖</strong>,避免手动创建实例<br />✔️ <strong>ViewModel 支持</strong>,与 Jetpack 组件无缝集成<br />✔️ <strong>作用域管理</strong>,不同组件(Activity、Fragment)能获得合适的对象<br />✔️ <strong>简化 Dagger 依赖注入</strong>,代码更简洁</p>
<p class="maodian"></p><h3>2️⃣ Hilt 的基本使用</h3>
<p class="maodian"></p><h4>📌(1)添加 Hilt 依赖</h4>
<p>与第一点相同</p>
<div class="jb51code"><pre class="brush:java;">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")
}</pre></div>
<p class="maodian"></p><h4>📌(2)初始化 Hilt</h4>
<p>在 <code>AndroidManifest.xml</code>:</p>
<div class="jb51code"><pre class="brush:xml;">&lt;application
    android:name=".MyApplication"
    ...&gt;
&lt;/application&gt;</pre></div>
<p>然后创建 <code>MyApplication.kt</code>:</p>
<div class="jb51code"><pre class="brush:java;">@HiltAndroidApp
class MyApplication : Application()</pre></div>
<p>🔹 <code>@HiltAndroidApp</code> <strong>用于初始化 Hilt</strong>,它会在 App 启动时配置依赖注入。</p>
<p class="maodian"></p><h4>📌(3)在 Activity/Fragment 使用 Hilt</h4>
<h5>在 Activity 里启用 Hilt</h5>
<div class="jb51code"><pre class="brush:java;">@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    @Inject
    lateinit var someClass: SomeClass// 自动注入
}</pre></div>
<p>🔹 <code>@AndroidEntryPoint</code> <strong>标记 Activity 以支持 Hilt</strong><br />🔹 <code>@Inject lateinit var someClass: SomeClass</code> <strong>直接注入对象</strong></p>
<h5>在 Fragment 里启用 Hilt</h5>
<div class="jb51code"><pre class="brush:java;">@AndroidEntryPoint
class MainFragment : Fragment() {
    @Inject
    lateinit var someRepository: SomeRepository
}</pre></div>
<p>💡 Activity 和 Fragment 都必须加 <code>@AndroidEntryPoint</code> 才能使用 Hilt 注入的对象!</p>
<p class="maodian"></p><h4>📌(4)在 ViewModel 里使用 Hilt</h4>
<div class="jb51code"><pre class="brush:java;">@HiltViewModel
class MainViewModel @Inject constructor(
    private val repository: SomeRepository
) : ViewModel() {
    fun fetchData() = repository.getData()
}</pre></div>
<p>在 <code>Activity</code> 或 <code>Fragment</code> 里:</p>
<div class="jb51code"><pre class="brush:java;">private val viewModel: MainViewModel by viewModels()</pre></div>
<p>🔹 Hilt 自动创建 <code>MainViewModel</code>,不用 <code>ViewModelProvider</code> 手动实例化。</p>
<p class="maodian"></p><h4>📌(5)创建 Hilt 模块(Module)</h4>
<p>如果 <code>SomeRepository</code> 不能用 <code>@Inject</code> 直接构造,比如 Retrofit,们需要 <strong>使用 Module 提供实例</strong>:</p>
<div class="jb51code"><pre class="brush:java;">@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)
    }
}</pre></div>
<p>🔹 <code>@Module</code> 标记为 Hilt 模块<br />🔹 <code>@Provides</code> 提供依赖<br />🔹 <code>@Singleton</code> 表示单例</p>
<p class="maodian"></p><h3>3️⃣ Hilt 作用域</h3>
<table><thead><tr><th>作用域</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>@Singleton</code></td><td><strong>全局单例</strong>,应用级共享</td><td>Retrofit、数据库</td></tr><tr><td><code>@ActivityScoped</code></td><td>只在 <strong>Activity</strong> 里共享</td><td>共享 ViewModel</td></tr><tr><td><code>@ViewModelScoped</code></td><td>只在 <strong>ViewModel</strong> 里共享</td><td>Repository</td></tr></tbody></table>
<p class="maodian"></p><h3>4️⃣ Hilt 实战示例</h3>
<p class="maodian"></p><h4>1️⃣ 创建一个 Repository</h4>
<div class="jb51code"><pre class="brush:java;">class SomeRepository @Inject constructor() {
    fun getData(): String = "Hello from Repository"
}</pre></div>
<p class="maodian"></p><h4>2️⃣ 在 ViewModel 里注入</h4>
<div class="jb51code"><pre class="brush:java;">@HiltViewModel
class MainViewModel @Inject constructor(
    private val repository: SomeRepository
) : ViewModel() {
    fun fetchData(): String = repository.getData()
}</pre></div>
<p class="maodian"></p><h4>3️⃣ 在 Activity 里获取数据</h4>
<div class="jb51code"><pre class="brush:java;">@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
    private val viewModel: MainViewModel by viewModels()
    override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContentView(R.layout.activity_main)
      findViewById&lt;TextView&gt;(R.id.textView).text = viewModel.fetchData()
    }
}</pre></div>
<p>✅ 运行后,TextView 显示 <code>&quot;Hello from Repository&quot;</code> 🎉</p>
<p class="maodian"></p><h3>5️⃣ 总结</h3>
<p>🔹 <code>@HiltAndroidApp</code> 让应用支持 Hilt<br />🔹 <code>@AndroidEntryPoint</code> 用于 Activity/Fragment<br />🔹 <code>@HiltViewModel</code> 用于 ViewModel<br />🔹 <code>@Inject</code> 直接注入类实例<br />🔹 <code>@Module + @Provides</code> 提供无法直接注入的对象(如 Retrofit)<br />🔹 <code>@Singleton</code>、<code>@ActivityScoped</code> 控制对象生命周期</p>
<p>Hilt 让 <strong>依赖注入变得简单高效</strong>,可以自动管理对象,提升代码的可维护性。</p>
<p class="maodian"></p><h2>参考</h2>
<p>google Hilt 教程</p>
<p>到此这篇关于Android Hilt 入门教程_实战的文章就介绍到这了,更多相关Android Hilt 入门内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>Android中Hilt的使用详解</li><li>Android Hilt Retrofit Paging3使用实例</li><li>Android&nbsp;Hilt依赖注入的使用讲解</li><li>Android Hilt的使用以及遇到的问题</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: Android Hilt 入门使用实战