Dagger 2.15: Appcomponent - не удалось обработать этот интерфейс - PullRequest
0 голосов
/ 23 мая 2018

Я не могу создать свое приложение со следующей ошибкой:

 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 {
            ^

Я использую кинжал 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

Код 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)
}

Код 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()
    }
}

Код MainActivityModule.kt

@Suppress("unused")
@Module
abstract class MainActivityModule {
    @ContributesAndroidInjector(modules = [FragmentBuildersModule::class])
    abstract fun contributeMainActivity(): MainActivity
}

Код FragmentBuildersModule.kt

@Suppress("unused")
@Module
abstract class FragmentBuildersModule {
    @ContributesAndroidInjector
    abstract fun contributeUserFragment(): UserFragment
}

Я всегда сталкиваюсь с этой ограниченной ошибкой с Кинжалом.Попытка отладить задачу, но больше не дает информации.Надеюсь, кто-нибудь еще может намекнуть на что-то.

И последнее.Я также использую gradle wrapper 4.7 и Android Studio 3.1.2

ОБНОВЛЕНИЕ:

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
}

1 Ответ

0 голосов
/ 30 июня 2018

У меня был точно такой же код, скопированный из примера GitHub Google, и возникла та же проблема.Оказалось, что я решил эту проблему - очистить все другие ошибки в вашей программе, особенно те, которые связаны с импортированными модулями.Таким образом, у меня были проблемы с моей частью базы данных Room и были ошибки во время сборки.Сначала я думал, что это не связано с ошибкой AppComponent.Но после того как я их очистил, все было хорошо.Это имеет смысл, неудачно созданный модуль - это зависимость, которая не может быть resolved.И, вероятно, compilation errors в сообщении об ошибке означало ошибки в целом.

Надеюсь, это поможет вам

...