Ожидается, что @HiltAndroidApp будет иметь значение. Вы забыли применить плагин Gradle? - PullRequest
4 голосов
/ 14 июля 2020

У меня есть эта проблема с Google, но результаты не работают для меня.

Детали, как показано ниже.

    public final class App extends com.zhixin.wedeep.common.BaseApplication implements androidx.lifecycle.LifecycleOwner {
                 ^
     // Expected @HiltAndroidApp to have a value. Did you forget to apply the Gradle Plugin?

Код приложения.

@HiltAndroidApp
class App : BaseApplication(), LifecycleOwner {

    @Inject
    lateinit var service: EventService


    private val mLifecycleRegistry = LifecycleRegistry(this)

}


Это модуль gradle file.

apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-allopen'
apply plugin: 'androidx.navigation.safeargs.kotlin'
apply plugin: 'dagger.hilt.android.plugin'

dependencies {
    implementation rootProject.ext.dependencies["hilt-android"]
    implementation rootProject.ext.dependencies["hilt-lifecycle-viewmodel"]
    kapt rootProject.ext.kapt["hilt-compiler"]
    kapt rootProject.ext.kapt["hilt-android-compiler"]
}

У кого есть идеи? Спасибо!

Ответы [ 2 ]

15 голосов
/ 14 июля 2020

Я столкнулся с этой проблемой сегодня утром. Есть ли в вашем build.gradle что-нибудь, что добавляет аргументы в annotationProcessOptions? Например:

  android {
        ...
        defaultConfig {
            ...
            javaCompileOptions {
                annotationProcessorOptions {
                    arguments = ["room.schemaLocation":
                                 "$projectDir/schemas".toString()]
                }
            }
        }
    }

Если это так, попробуйте изменить значение с «arguments =» на «arguments + =», поскольку простое использование равенства перезаписывает все, что было установлено ранее.

2 голосов
/ 18 июля 2020

Для резервного копирования @ Steve C ответ, при использовании Kotlin Gradle DSL немного отличается

Мы не можем использовать ни +=, ни arguments = mapOf(). Как указано в официальной документации Dagger-Hilt здесь и проблема с github здесь , а также в отношении документации

Пояснения см. На изображении ниже:

аргументы = mapOf ()

  1. arguments = mapOf() вызовет setArguments с this.arguments.clear(), таким образом перезапишет предыдущий аргумент (в данном случае Hilt)

Обходной подход:

        javaCompileOptions {
            annotationProcessorOptions {
                arguments(
                    mapOf(
                        "dagger.gradle.incremental" to "true",
                        "room.incremental" to "true"
                    )
                )
            }
        }

Обернув arguments() как функцию вместо вызова установщика, он также сохранит предыдущий arguments.

...