Неразрешенный справочник DaggerApplicationComponent

Я пытаюсь создать свой компонент приложения, но Dagger не создает компонент моего приложения. здесь класс MyApplication

class MyApplication : Application() {

companion object {
    @JvmStatic lateinit var graph: ApplicationComponent
}
@Inject
lateinit var locationManager : LocationManager

override fun onCreate() {
    super.onCreate()
    graph = DaggerApplicationComponent.builder().appModule(AppModule(this)).build()
    graph.inject(this)
  }
}

и вот мой класс AppComponent

@Singleton
@Component(modules = arrayOf(AppModule::class))
interface ApplicationComponent {
    fun inject(application: MyApplication)
}

вот скриншот введите описание изображения здесь

это мой проект в github

здесь находится журнал ошибок

Error:(7, 48) Unresolved reference: DaggerApplicationComponent
Error:(28, 17) Unresolved reference: DaggerApplicationComponent
Error:Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
Information:BUILD FAILED
Information:Total time: 21.184 secs
Error:e: .../MyApplication.kt: (7, 48): Unresolved reference: DaggerApplicationComponent
e: Unresolved reference: DaggerApplicationComponent
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

Information:4 errors
Information:0 warnings
Information:See complete output in console

Ответы

Ответ 1

Мое решение состоит в том, чтобы добавить

apply plugin: 'kotlin-kapt'

и удалите

kapt {
    generateStubs = true
}

Ответ 2

Попробуйте включить создание заглушек, это может быть причиной того, что класс не отображается на этом этапе процесса сборки. В вашем файле build.gradle верхний уровень:

kapt {
    generateStubs = true
}

Ответ 3

Это помогло мне решить эту проблему.

Добавьте это в начало build.gradle

apply plugin: 'kotlin-kapt'

Внутри тега android добавить

kapt {
    generateStubs = true
}

И затем замените

annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

to

kapt 'com.google.dagger:dagger-compiler:2.11'

Теперь Rebuild проект

Build -> Rebuild project

Ответ 4

Я уже загрузил ваш проект Github. Спасибо, что поделились!

Ответ на ваш вопрос довольно прост:

Build -> Rebuild project

Файлы зависимостей кинжалов будут воссозданы, а приложение после запуска будет запущено с любой проблемой.

Я уже проверил это с версией Android Studio 2.1.2. Он работает

Ответ 5

вы должны удалить

kapt {
generateStubs = true}

и добавьте в начало приложения gradle файл

apply plugin: 'kotlin-kapt'

тогда Кинжал позаботится об остальных:)

Ответ 6

Для смешанных проектов Java/Kotlin необходимо выполнить всего два шага:

  1. Добавьте apply plugin: 'kotlin-kapt' в начало файла сборки
  2. Замените annotationProcessor 'com.google.dagger:dagger-compiler:2.14.1' на kapt 'com.google.dagger:dagger-compiler:2.14.1'

Ответ 7

Также для пользователей Java решение состоит в том, чтобы просто перестроить ваш проект.

Ответ 8

Ответ прост:

Build → Rebuild project

Меня устраивает.

Ответ 9

В моем случае отсутствует зависимость компилятора капта. Пожалуйста, убедитесь, что у вас есть ниже зависимости тоже.

kapt 'com.google.dagger:dagger-compiler:2.15'

приложение build.gradle

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-kapt'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.usb.utility"
        minSdkVersion 14
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.google.dagger:dagger-android:2.15'
    compile 'com.google.dagger:dagger-android-support:2.15' // if you use the support libraries
    kapt 'com.google.dagger:dagger-android-processor:2.15'
    kapt 'com.google.dagger:dagger-compiler:2.15'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

Ответ 10

Попробуйте добавить это в свой build.gradle

android {
    dexOptions {
        incremental false
    }

EDIT: видимо, через год это может произойти, если вы не применяете плагин kotlin-kapt. Также убедитесь, что вы используете kapt вместо annotationProcessor.

Ответ 11

Добавьте это на вершине build.gradlle

применить плагин: 'kotlin-kapt'

Добавьте это в зависимости

kapt 'com.google.dagger:dagger-compiler:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'