Ожидается, что @HiltAndroidApp будет иметь значение. Вы забыли применить плагин Gradle?

У меня есть 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)

}


Этот файл градиента модуля.

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"]
}

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


person Cyrus    schedule 14.07.2020    source источник
comment
Эта проблема также появляется после обновления Kotlin до версии 1.5.20 (github.com/google/dagger/issues/ 2684) Добавление kapt.use.worker.api=false в gradle.properties решает проблему.   -  person Slav    schedule 25.06.2021
comment
Исправлено Котлином 1.5.21   -  person Mario Huizinga    schedule 13.07.2021


Ответы (6)


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

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

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

person SteveC    schedule 14.07.2020
comment
Это работает для меня, потому что я не добавляю ``` annotationProcessorOptions { arguments += [room.schemaLocation: $projectDir/schemas.toString()] }``` в файл build.gradle моего модуля. В документах не указано, что вышеуказанные коды должны быть добавлены в build.gradle при использовании Room. - person Cyrus; 14.07.2020
comment
для Kotlin DLS это может быть: arguments = arguments + mapOf("room.incremental" to "true") - person i30mb1; 06.08.2020
comment
можно также использовать этот синтаксис arguments["room.schemaLocation"] = ... arguments["room.incremental"] = true, чтобы добавить столько аргументов, сколько они хотят, но с приведенным выше ответом это, скорее всего, не нужно - person Ace; 17.11.2020

РЕДАКТИРОВАТЬ: похоже, что плагин kotlin gradle 1.5.21 решает проблему без использования нижеприведенных javacOptions. ОБНОВИТЕ Kotlin и попробуйте еще раз!

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"

Если вы не используете Room и по-прежнему получаете ошибку, поместите это в блок android build.gradle:

kapt {
    javacOptions {
        // These options are normally set automatically via the Hilt Gradle plugin, but we
        // set them manually to workaround a bug in the Kotlin 1.5.20
        option("-Adagger.fastInit=ENABLED")
        option("-Adagger.hilt.android.internal.disableAndroidSuperclassValidation=true")
    }
}

Это ошибка kapt в kotlin 1.5.20: https://github.com/google/dagger/issues/2684

person Sergio    schedule 26.06.2021

РЕШЕНИЕ 1: Понизить котлин

Если вы используете kotlin-gradle-plugin:1.5.20 (на уровне вашего проекта build.gradle), понижение его до 1.5.10 должно решить проблему. Проблема, вероятно, будет исправлена ​​в следующих версиях, после чего вы обновитесь до новой версии.

РЕШЕНИЕ 2. Отключить рабочий API Gradle

Добавьте эту строку в свой файл gradle.properties:

kapt.use.worker.api=false

Это отключит рабочий API Gradle. У меня это работает, но, как сказано в документации :

Использование рабочего API позволяет Gradle параллельно запускать независимые задачи обработки аннотаций из одного проекта, что в некоторых случаях значительно сокращает время выполнения.

Поэтому, отключив его, ваша сборка может замедлиться.

person sitatech    schedule 30.06.2021

Только не забудьте добавить зависимость Hilt classpath в файл gradle на уровне проекта:

classpath "com.google.dagger:hilt-android-gradle-plugin:$versions.daggerHiltCoreVersion"

Определите конкретный номер версии вместо $versions.daggerHiltCoreVersion выше.

И добавьте плагин в градиент уровня вашего приложения:

apply plugin : 'dagger.hilt.android.plugin'

Для более поздних версий Gradle добавьте плагин следующим образом.

plugins {
    id 'dagger.hilt.android.plugin'
}
person Osman Yalın    schedule 12.11.2020
comment
работал как шарм для меня - person codingwithtashi; 26.01.2021

Чтобы сделать резервную копию ответа @SteveC, при использовании Kotlin Gradle DSL немного отличается

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

Смотрите ниже изображение для пояснений:

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

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

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

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

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

person mochadwi    schedule 18.07.2020

В дополнение к ответу sitetech я также столкнулся с этой проблемой, используя kotlin-grade-plugin-1.5.20. Новый патч 1.5.21 решил эту проблему за меня.

Примечания к выпуску плагина Kotlin Grade v1.5.21: https://github.com/JetBrains/kotlin/releases/tag/v1.5.21

Проблема в системе отслеживания проблем Jetbrains: https://youtrack.jetbrains.com/issue/KT-47416< /а>

person Karl Jamoralin    schedule 14.07.2021