[TOC]
1 Hilt相较于Dagger的优势
在我们了解Hilt之前,先需要知道Dagger, Dagger是Google提供的用于依赖注入的库,该库很多人可能都听过.Dagger的特点总结一下就是:牛逼,高端,难用.那这么牛逼高端的库为什么不用?答案就是后边两个字:难用!!!至于为什么难用,主要原因是该库是为了Java,Kotlin以及Android设计的,是为了解决基于反射解决方案引起的许多开发和性能问题,详细解释可以看看Dagger官网[https://dagger.dev/]以及我之前写的一篇简单文章[Dagger简单使用及实现原理(https://www.jianshu.com/p/9d80a6cb59f2])]
因为太难用了,所以Google专门为我们提供了一个使用更简单的依赖注入库Hilt.
Hilt是Android的依赖注入库,可减少在项目中执行手动DI[依赖注入]的样板代码,执行手动依赖注入需要手动构造每个类及依赖项,通过组件管理依赖项.
2 添加依赖项
首先将hilt-android-gradle-plugin
插件添加到根项目的build.gradle
文件中:
buildscript {
...
dependencies {
...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
}
}
然后在app/build.gradle文件中添加依赖项:
...
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
android {
...
}
dependencies {
implementation "com.google.dagger:hilt-android:2.28-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.28-alpha"
}
这里有一个需要注意的地方:同时使用 Hilt 和数据绑定的项目需要 Android Studio 4.0 或更高版本,最好是>=4.1版本,新版本支持依赖注入指向。
Hilt使用Java8
功能,如需在项目中启动Java8,请在app/build.gradle文件中增加如下代码:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
3 Hilt增加应用类注解
所有使用Hilt的项目都需要包含一个带有@HiltAndroidApp
注释的Application
类.
@HiltAndroidApp
会触发Hilt代码生成,生成的代码包含应用的一个基类,该基类充当应用级依赖项容器。
3_1 Hilt为何要增加@HiltAndroidApp
注解
首先我们进入@HiltAndroidApp`看看Google的注释
package dagger.hilt.android;
...
/*
*
* {@literal @}HiltAndroidApp(Application.class)
* public final class FooApplication extends Hilt_FooApplication {
* {@literal @}Inject Foo foo;
*
* {@literal @}Override
* public void onCreate() {
* super.onCreate(); // The foo field is injected in super.onCreate()
* }
* }
*
*
* @see AndroidEntryPoint
*/
// Set the retention to RUNTIME because we check it via reflection in the HiltAndroidRule.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@GeneratesRootInput
public @interface HiltAndroidApp {
}
可以看到Hilt给我们的FooApplication生成了一个Hilt_FooApplication
类,这个Hilt_FooApplication
是做什么的我们稍后看看,另外我们可以看到在onCreate()
我们可以增加依赖注入
我们在看看Hilt_FooApplication
做了什么
public abstract class Hilt_TestHiltApplication extends Application implements GeneratedComponentManager