Hilt

本文详细介绍了如何在Android应用中使用Hilt进行依赖注入,包括添加依赖、配置插件、创建自定义Application和Activity、模块化提供服务以及Hilt对ViewModel的支持。重点展示了如何在Hilt中管理组件和生命周期。
该文章已生成可运行项目,

1.使用Hilt实现快速依赖注入

1.1 导入依赖

  //hilt依赖
    //Hilt
    implementation("com.google.dagger:hilt-android:2.44")
    annotationProcessor("com.google.dagger:hilt-android-compiler:2.44")

1.2 在build.gradle(app)中加入插件

plugins {
    id("com.android.application")
    id("dagger.hilt.android.plugin")//hilt插件
}

1.3 在build.gradle(project)中加入classpath 

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    id("com.android.application") version "8.1.4" apply false
}

buildscript{
    dependencies{
         classpath("com.google.dagger:hilt-android-gradle-plugin:2.44")
   }
}

1.4 创建自定义Applciation

package com.hilt;

import android.app.Application;

import dagger.hilt.android.HiltAndroidApp;

@HiltAndroidApp //生成相应的组件
public class MyApplication extends Application {
}

1.5 将自定义Application添加到 清单文件

1.6 将要注入的类

package com.hilt;

import javax.inject.Inject;

public class User {
    //把对象实例的获取称之为绑定

    @Inject
    public User(){

    }
}

1.7 activity

package com.hilt;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import javax.inject.Inject;

import dagger.hilt.android.AndroidEntryPoint;
import dagger.hilt.android.HiltAndroidApp;

@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {


    @Inject
    User user;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d("ning",user.toString());


    }
}

注入成功 

2.Hilt 的优势

3.在Hilt 中使用Module

package com.hilt;

import javax.inject.Singleton;

import dagger.Module;
import dagger.Provides;
import dagger.hilt.InstallIn;
import dagger.hilt.android.components.ActivityRetainedComponent;
import dagger.hilt.android.internal.managers.ApplicationComponentManager;
import dagger.hilt.components.SingletonComponent;

@InstallIn(SingletonComponent.class)//Application作用域
@Module
public class AppModule {

    @Singleton
    @Provides
    User providerUser(){
        return new User();
    }



}
package com.hilt;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import javax.inject.Inject;

import dagger.hilt.android.AndroidEntryPoint;
import dagger.hilt.android.HiltAndroidApp;

@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {


    @Inject
    User user;

    @Inject
    User user2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d("ning",user.toString());
        Log.d("ning",""+(user==user2));

    }
}

4.默认标准组件

ApplicationComponent新版本变成 

SingletonComponent

5.限定符注入Context

    @Inject//默认是ApplicationComponent
    public ViewModel(User user, Application application,Activity activity,@ApplicationContext Context context) {
        this.user = user;
        this.application = application;
        this.activity = activity;
        this.context = context;
    }
    @Inject//默认是ApplicationComponent
    public ViewModel(User user, Application application,Activity activity,@ActivityContext Context context) {
        this.user = user;
        this.application = application;
        this.activity = activity;
        this.context = context;
    }

6.Hilt 对 ViewModel的支持

6.1导入依赖

    //hilt依赖
    //Hilt
    implementation("com.google.dagger:hilt-android:2.44")
    annotationProcessor("com.google.dagger:hilt-android-compiler:2.44")

    //JetPack hilt 支持
    implementation("androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03")
    annotationProcessor("androidx.hilt:hilt-comiler:1.0.0-alpha03")
plugins {
    id("com.android.application")
    id("dagger.hilt.android.plugin")//hilt插件
}

buildscript{
    dependencies{
        classpath("com.google.dagger:hilt-android-gradle-plugin:2.44")
    }
}

这里有点问题,以后在用Kotlin是另一套,这里主要了解使用流程,和核心思想!

本文章已经生成可运行项目
03-22
<think>好的,用户想了解关于Android Hilt依赖注入的教程。首先,我需要回忆Hilt的基本概念和用法。HiltGoogle基于Dagger开发的依赖注入库,简化了在Android中的使用。用户可能已经接触过Dagger,但觉得配置复杂,所以转向Hilt。 根据用户提供的引用,特别是引用[3],Hilt需要添加Gradle插件。我应该先介绍如何配置Hilt,包括项目级的build.gradle和模块级的配置。用户可能需要具体的代码示例,比如添加classpath和应用插件。 然后,用户可能需要知道如何定义和注入依赖。引用[2]提到使用@AndroidEntryPoint注解,比如在Fragment中添加。需要解释@HiltAndroidApp、@Inject、@Module和@Provides等注解的用法。例如,如何创建一个Module类,提供依赖实例。 接下来,用户可能关心实际应用中的例子,比如在Activity或Fragment中注入ViewModel或者网络服务。引用[1]和引用[4]中的资源可以作为参考,强调Hilt如何简化依赖注入的过程,提升代码的可测试性和维护性。 还需要考虑用户可能遇到的常见问题,比如作用域、组件生命周期管理,以及如何结合其他Jetpack库使用。例如,Hilt如何与ViewModel一起工作,或者如何处理不同作用域的依赖。 最后,生成相关问题时,应该覆盖配置步骤、基本用法、注解作用、优缺点比较以及最佳实践。用户可能对HiltDagger的区别、如何测试使用Hilt的应用,或者如何处理复杂依赖关系感兴趣。需要确保问题能够引导用户进一步探索,同时覆盖他们可能忽略的重要方面。</think>### Android Hilt依赖注入教程 HiltGoogle基于Dagger开发的依赖注入框架,专为Android设计,简化了依赖注入的配置过程。以下是Hilt的核心用法: --- #### 1. **Hilt的配置** - **步骤1**:在根目录的`build.gradle`中添加Hilt插件: ```gradle buildscript { dependencies { classpath 'com.google.dagger:hilt-android-gradle-plugin:2.44' // 更新至最新版本[^3] } } ``` - **步骤2**:在模块的`build.gradle`中启用插件: ```gradle plugins { id 'kotlin-kapt' id 'dagger.hilt.android.plugin' } dependencies { implementation 'com.google.dagger:hilt-android:2.44' kapt 'com.google.dagger:hilt-compiler:2.44' } ``` --- #### 2. **Hilt的基本用法** - **初始化**:在`Application`类中添加`@HiltAndroidApp`注解: ```kotlin @HiltAndroidApp class MyApp : Application() ``` - **注入依赖**:在Activity/Fragment中使用`@AndroidEntryPoint`注解[^2]: ```kotlin @AndroidEntryPoint class MainActivity : AppCompatActivity() { @Inject lateinit var analyticsService: AnalyticsService // 自动注入 } ``` --- #### 3. **定义依赖项** - **通过构造函数注入**:使用`@Inject`注解: ```kotlin class AnalyticsService @Inject constructor() { fun trackEvent(event: String) { ... } } ``` - **通过模块提供依赖**:使用`@Module`和`@Provides`: ```kotlin @Module @InstallIn(SingletonComponent::class) // 作用域为全局单例 class NetworkModule { @Provides fun provideRetrofit(): Retrofit { return Retrofit.Builder().baseUrl("https://api.example.com/").build() } } ``` --- #### 4. **结合ViewModel使用** Hilt支持直接注入ViewModel: ```kotlin @HiltViewModel class MyViewModel @Inject constructor( private val repository: UserRepository ) : ViewModel() { ... } ``` --- #### 5. **Hilt的优缺点** - **优点**: - 减少模板代码,自动生成组件 - 与Android生命周期绑定,避免内存泄漏[^1] - 支持Jetpack组件(如ViewModel、WorkManager) - **缺点**: - 学习曲线较陡(需理解注解处理器) - 调试困难(生成的代码较多) ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值