关于android:Hilt多模块项目实现一

45次阅读

共计 2163 个字符,预计需要花费 6 分钟才能阅读完成。

本文适宜有肯定的 Dagger2 应用根底的同学

上一篇:dagger.android 多模块我的项目实现 (二)
下一篇:[Hilt 多模块我的项目实现(二)]()

前两篇咱们讲了 dagger.android 在多模块我的项目中的用法能够看到 dagger.android 让 Android 我的项目依赖注入变得更简略。但这还不是最简略的,android 官网最近又给出了一个新的 Hint。它是 dagger.android 的升级版,当初还只是 alpha 版,Hilt 应用起来超级简略,不须要咱们定义任何 Component,只须要 Module 就能够了。

单个模块的我的项目按官网做就能够,多模块我的项目中,一般多模块我的项目和单模块我的项目没有区别,本篇咱们先讲下一般多模块我的项目的实现。

咱们在 dagger.android 多模块我的项目 (一) 的根底上革新实现

所有 Component 都删掉,只留下 Module 和 Activity 就能够了

先增加 Hilt 依赖

在我的项目 build.gralde 中加上

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

在所有应用到 Hilt 的模块的 build.gralde 中加上,这里有点比拟奇怪按理 hilt-android 用 api 办法引入放在 base 模块就能够的,然而这样却会报错,兴许是 Hilt 的一个 bug 吧。

apply plugin: 'com.android.application'
//apply plugin: 'com.android.library'

apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'

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

app 模块:

在 AppApplication 加上一个 @HiltAndroidApp 注解,留神不要加到 BaseApplication 下来了

@HiltAndroidApp
class AppApplication : BaseApplication() {}

AppModule 加上一个 @InstallIn(ApplicationComponent::class) 这个代码 AppModule 为 ApplicationComponent 提供依赖

@Module
@InstallIn(ApplicationComponent::class)
class AppModule {

    @IntoSet
    @Provides
    fun provideString(): String {return "app"}
}

user,news 模块:

UserModule、NewsModule 加上一个 @InstallIn(ActivityComponent::class) 这个代码示意 UserModule、NewsModule 为 ActivityComponent 提供依赖

@Module
@InstallIn(ActivityComponent::class)
class NewsModule {

    @IntoSet
    @Provides
    fun provideString(): String {return "news"}
}

@Module
@InstallIn(ActivityComponent::class)
class UserModule {
    @IntoSet
    @Provides
    fun provideString(): String {return "user"}
}

UserActivity、NewsActivity 加上一个 @AndroidEntryPoint,这代表这个 Activity 须要 Hint 注入对象,留神,这个不能够加在 BaseActivity 上,这样做没用,只能加在最终页面上

@AndroidEntryPoint
class NewsActivity : BaseActivity() {

    @Inject
    lateinit var set: Set<String>

    override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_news)
        text.text = set.toString()}
}
@AndroidEntryPoint
class UserActivity : BaseActivity() {

    @Inject
    lateinit var set: Set<String>

    override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_user)
        text.text = set.toString()}
}

到这里 Hilt 注入就实现了,是不是超级简略

代码地址

正文完
 0