Kotlin Dagger2找不到符号ApplicationModule_ProvideApplicationFactory

我试图用Kotlin使用Dagger2,但今天试图编译得到这个错误:

错误:任务':app:compileDebugJavaWithJavac'的执行失败。

错误:(5,43)错误:找不到符号类ApplicationModule_ProvideApplicationFactory

(应用程序)Build.gradle

apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.ilyarb.geotags" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main.java.srcDirs += 'src/main/kotlin' } dexOptions { javaMaxHeapSize "2048M" } } kapt { generateStubs = true } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" final SUPPORT_LIBRARY_VERSION = "23.3.0" final PLAY_SERVICES_VERSION = "8.4.0" compile "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION" compile "com.android.support:design:$SUPPORT_LIBRARY_VERSION" // Dagger 2 compile 'com.google.dagger:dagger:2.0.2' kapt 'com.google.dagger:dagger-compiler:2.0.2' provided 'org.glassfish:javax.annotation:10.0-b28' compile "com.google.android.gms:play-services-maps:$PLAY_SERVICES_VERSION" compile "com.google.android.gms:play-services-location:$PLAY_SERVICES_VERSION" compile 'com.jakewharton.timber:timber:4.1.0' compile 'com.jakewharton.byteunits:byteunits:0.9.1' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1' testCompile 'junit:junit:4.12' } repositories { mavenCentral() } buildscript { ext.kotlin_version = '1.0.1-2' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } 

根build.gradle

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 

应用程序类

 package com.ilyarb.geotags import android.app.Application import com.google.android.gms.common.api.GoogleApiClient import com.ilyarb.geotags.injection.component.ApplicationComponent import com.ilyarb.geotags.injection.component.DaggerApplicationComponent import com.ilyarb.geotags.injection.module.ApplicationModule import com.squareup.leakcanary.LeakCanary import timber.log.Timber import javax.inject.Inject class GeotagApp : Application() { @Inject lateinit var mGoogleApiClient: GoogleApiClient companion object { @JvmStatic lateinit var mApplicationComponent: ApplicationComponent } override fun onCreate() { super.onCreate() LeakCanary.install(this) if (BuildConfig.DEBUG) { Timber.plant(Timber.DebugTree()) } mApplicationComponent = DaggerApplicationComponent.builder() .applicationModule(ApplicationModule(this)) .build() mApplicationComponent.inject(this) } } 

应用组件

 package com.ilyarb.geotags.injection.component import android.app.Application import com.ilyarb.geotags.injection.module.ApplicationModule import dagger.Component import javax.inject.Singleton @Singleton @Component(modules = arrayOf(ApplicationModule::class)) interface ApplicationComponent { fun inject(application: Application) } 

应用程序模块

 package com.ilyarb.geotags.injection.module import android.app.Application import com.google.android.gms.common.api.GoogleApiClient import com.google.android.gms.location.LocationServices import dagger.Module import dagger.Provides import javax.inject.Singleton @Module class ApplicationModule(private val mApplication: Application) { @Provides @Singleton fun provideGoogleApiClient() : GoogleApiClient { return GoogleApiClient.Builder(mApplication) .addApi(LocationServices.API) .build() } } 

它生成DaggerApplicationComponent,但是当我尝试运行应用程序失败,并出现此错误。

我已经尝试清理和重建项目,但没有奏效。

任何帮助将不胜感激。

通过你的项目看,我注意到你的一些匕首Module提供的方法与像providesContext()类似的名字。 匕首2(或kapt)可能有问题,这会导致你的错误。 请尝试重命名它们,以便所有@Provides方法具有唯一的名称。

此外,注释在默认情况下在Kotlin中具有运行时保留,所以您不需要使用@Retention(AnnotationRetention.RUNTIME)