第一步:首先在工程的build.gradle中添加,如下代码:
classpath ‘com.google.dagger:hilt-android-gradle-plugin:2.28-alpha’
添加位置如下图所示:
第二步:在app下的build.gradle中添加插件,代码如下:
apply plugin: ‘dagger.hilt.android.plugin’
添加位置如下图所示:
第三步:在app下的build.gradle中的denpendencies{}闭包中添加如下代码:
implementation “com.google.dagger:hilt-android:2.28-alpha”
annotationProcessor “com.google.dagger:hilt-android-compiler:2.28-alpha”
添加位置如下图所示:
这里还有一点需要注意,同时使用 Hilt 和数据绑定的项目需要 Android Studio 4.0 或更高版本,这一点是Google官网要求的。因此还没有升级的可以升级AS了,否则你在低版本的AS中使用指不定出现什么幺蛾子。还有一点就是你需要支持Java8及以上,这一点就不多说明了,因为现在最低都是Java8了。
完成这些操作之后点击右上角的Sync Now进行项目的同步依赖。
1. Hilt 应用类
在使用Hilt的时候会有一些常用的注解,有一些是必不可少的,所有使用 Hilt 的应用都必须包含一个带有 @HiltAndroidApp 注释的 Application 类。我们的项目中我写过一个BaseApplication类,那么添加这个注解即可。如下图所示:
添加完成之后,我们再重新运行一下,先看看项目有没有啥问题,使用新的组件时要小心一些,尤其是这种注解的组件,不小心的话找bug找到你崩溃,但是好用也是真的好用。
果然是有问题,我以为是我的配置问题,然后我重新创建一个项目这样操作了一下发现没有问题,那么就应该是我项目中的其他配置导致Hilt出问题,通过排查最终定位到Room上,修改app的build.gradle中的代码,如下图所示,上面注释的一行是之前的,有标注的是修改的地方。
再运行一下,就不报错了。
不报错之后我们再进行别的注解使用。
Hilt为一些常用类提供了注入方法,Hilt 目前支持以下 Android 类:
Application(通过使用 @HiltAndroidApp)
Activity
Fragment
View
Service
BroadcastReceiver
如果您使用 @AndroidEntryPoint 为某个 Android 类添加注释,则还必须为依赖于该类的 Android 类添加注释。例如,如果您为某个 Fragment 添加注释,则还必须为使用该 Fragment 的所有 Activity 添加注释。
如果是自定义的类要使用注入则使用dagger2的就可以了。
2. ViewModel使用
因为我们使用了MVVM,那么对于ViewModel的处理Hilt也是支持的,要怎么去做呢,首先需要在app/build.gradle中添加依赖,代码如下:
// Hilt 对于ViewModel的支持
implementation ‘androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02’
annotationProcessor ‘androidx.hilt:hilt-compiler:1.0.0-alpha02’
添加位置如下图所示:
下面就先来改一个ViewModel试水,就拿MainViewModel来弄,首先修改MainRepository中的代码,它是给MainViewModel提供数据的。
我去掉了之前的单例,这里直接使用@Inject注入注解给一个类构造方法。然后去到MainViewModel中,也很简单。
最终我们的MainViewModel还是要在MainActivity中使用的,那么作为Activity来说需要使用一个@AndroidEntryPoint注解。
就这么简单