添加依赖项

首先,将hilt-android-gradle-plugin添加到项目的根级build.gradle文件中:

buildscript {
...
dependencies {
...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.38.1'
}
}

然后,应用Gradle插件并在app/build.gradle文件添加依赖:

plugins {
...
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin' //老版本的gradle方式略有不同 apply plugin:'dagger.hilt.android.plugin'
}

dependencies {
implementation "com.google.dagger:hilt-android:2.38.1"
kapt "com.google.dagger:hilt-android-compiler:2.38.1"
}

Hilt使用Java 8 功能 。如果需要在项目中启用Java 8,请将以下代码添加到app/build.gradle文件中:

android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

Hilt应用类

所有使用Hilt的应用都必须包含一个带有@HiltAndroidApp注释的Application

@HiltAndroidApp会触发Hilt的代码生成操作,生成的代码包括应用的一个基类,该基类充当应用级依赖项容器。

@HiltAndroidApp
class HiltApplication: Application() {
}

Build Project后会生成一个Hilt_HiltApplication的抽象类

public abstract class Hilt_HiltApplication extends Application implements GeneratedComponentManagerHolder {
private final ApplicationComponentManager componentManager = new ApplicationComponentManager(new ComponentSupplier() {
@Override
public Object get() {
return DaggerHiltApplication_HiltComponents_SingletonC.builder()
.applicationContextModule(new ApplicationContextModule(Hilt_HiltApplication.this))
.build();
}
});

@Override
public final ApplicationComponentManager componentManager() {
return componentManager;
}

@Override
public final Object generatedComponent() {
return this.componentManager().generatedComponent();
}

@CallSuper
@Override
public void onCreate() {
// This is a known unsafe cast, but is safe in the only correct use case:
// HiltApplication extends Hilt_HiltApplication
((HiltApplication_GeneratedInjector) generatedComponent()).injectHiltApplication(UnsafeCasts.<HiltApplication>unsafeCast(this));
super.onCreate();
}
}

将依赖注入Android类

Application 类中设置了 Hilt 且有了应用级组件后,Hilt 可以为带有 @AndroidEntryPoint 注释的其他 Android 类提供依赖项:

@AndroidEntryPoint
public class MainActivity extends AppCompatActivity { ... }

Hilt 目前支持以下Android类:

  • Application(通过使用@HiltAndroidApp)
  • Activity (Hilt仅支持扩展ComponentActivity的Activity,如AppCompactActivity)
  • Fragment(不支持保留的Fragment,仅支持扩展androidx.Fragment的Fragment)
  • View
  • Service
  • BroadcastReceiver