我无法构建我的应用程序,并出现以下错误:
Task :app:kaptDebugKotlin
debug/AppComponent.java:7: error: [ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor was unable to process this interface because not all of its dependencies could be resolved. Check for compilation errors or a circular dependency with generated code.
public abstract interface AppComponent {
^
我正在使用 dagger 2.15 并包含它的所有依赖项:
implementation deps.dagger.runtime
implementation deps.dagger.android
implementation deps.dagger.android_support
kapt deps.dagger.android_support_compiler
kapt deps.dagger.compiler
Code of AppComponent.kt
@Singleton
@Component(
modules = [
AndroidInjectionModule::class,
AppModule::class,
MainActivityModule::class]
)
interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): AppComponent
}
fun inject(app: App)
}
Code of AppModule.kt
:
@Module(includes = [ViewModelModule::class])
class AppModule {
@Provides
@Singleton
fun provideApplication(app: App): Context = app
@Singleton
@Provides
fun provideRetrofitService(): RetrofitService {
return Retrofit.Builder()
.baseUrl("https://dog.ceo/api/")
.client(createClient())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(LiveDataCallAdapterFactory())
.build()
.create(RetrofitService::class.java)
}
@Singleton
@Provides
fun provideDb(app: Application): CacheDb {
return Room
.databaseBuilder(app, CacheDb::class.java, "cache.db")
.fallbackToDestructiveMigration()
.build()
}
@Singleton
@Provides
fun provideUserDao(db: CacheDb): UserDao {
return db.dogImagesDao()
}
private fun createClient(): OkHttpClient {
val logger = HttpLoggingInterceptor.Logger { message -> Timber.tag("OkHttp").d(message) }
val interceptor = HttpLoggingInterceptor(logger)
interceptor.level = HttpLoggingInterceptor.Level.BODY
return OkHttpClient.Builder()
.addInterceptor(interceptor)
.connectTimeout(30, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(20, TimeUnit.SECONDS)
.build()
}
}
Code of MainActivityModule.kt
@Suppress("unused")
@Module
abstract class MainActivityModule {
@ContributesAndroidInjector(modules = [FragmentBuildersModule::class])
abstract fun contributeMainActivity(): MainActivity
}
Code of FragmentBuildersModule.kt
@Suppress("unused")
@Module
abstract class FragmentBuildersModule {
@ContributesAndroidInjector
abstract fun contributeUserFragment(): UserFragment
}
我在使用 Dagger 时总是遇到这种有限的错误。尝试调试任务但没有提供更多信息。希望其他人可以暗示我一些事情。
最后一件事。我也在使用gradle wrapper 4.7
and Android Studio 3.1.2
UPDATE:
ViewModelModule.kt
@Suppress("unused")
@Module
abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(UserViewModel::class)
abstract fun bindUserViewModel(userViewModel: UserViewModel): ViewModel
@Binds
abstract fun bindViewModelFactory(factory: ViewModelFactory): ViewModelProvider.Factory
}