【问题标题】:Dagger 2 with Instant App带有即时应用程序的匕首 2
【发布时间】:2018-06-07 15:20:19
【问题描述】:

我这几天一直在开发免安装应用。由于 Dagger 问题,我还没有编译它。

项目分为baseexportpreview作为特征。

export 模块中

@ExportScope
@Component(
        modules = [DrawExportModule::class],
        dependencies = [AppComponent::class])
interface DrawExportComponent: AndroidInjector<LiveDrawingExportActivity> {

    @Component.Builder
    abstract class Builder : AndroidInjector.Builder<LiveDrawingExportActivity>(){
        abstract fun plus(component: AppComponent): Builder
    }
}

AppComponent.kt

@Singleton
@Component(modules = [
    AndroidInjectionModule::class,
    AppModule::class,
    ActivityBindingModule::class,
    ServiceBindingModule::class])
interface AppComponent {

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(context: Context): Builder

        fun build(): AppComponent
    }

    fun inject(app: LiveMessageApplication)
}

AppModule.kt

   @Module(includes = [(DataModule::class)])
   class AppModule {
   @Singleton
   @Provides
   fun provideStateManager(): StateManager {
        return StateManager.getInstance()
   }
}

编译错误日志

    /Users/*/features/export/build/tmp/kapt3/stubs/debug/*/ui/draw/di/DrawExportComponent.java:8: 
error: [Dagger/MissingBinding] [dagger.android.AndroidInjector.inject(T)] *.ui.StateManager cannot be provided without an @Inject constructor or an @Provides-annotated method.
    public abstract interface DrawExportComponent extends dagger.android.AndroidInjector<com.ctech.livemessage.ui.draw.LiveDrawingExportActivity> {
                    ^
          *.ui.StateManager is injected at
              *.LiveDrawingExportActivity.stateManager
          *.LiveDrawingExportActivity is injected at
              dagger.android.AndroidInjector.inject(T)

在我看来,依赖组件在这种情况下不起作用。我不知道要往前走。

更多信息 基础/build.gradle

apply plugin: 'com.android.feature'
apply plugin: 'io.fabric'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {

    compileSdkVersion deps.build.compileSdkVersion

    baseFeature = true

    defaultConfig {
        minSdkVersion deps.build.minSdkVersion
        targetSdkVersion deps.build.targetSdkVersion

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {

        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }

}

dependencies {

    application project(":installed")
    feature project(":features:export")
    feature project(":features:preview")
}

export/build.gradle

apply plugin: 'com.android.feature'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {

    compileSdkVersion deps.build.compileSdkVersion

    defaultConfig {
        minSdkVersion deps.build.minSdkVersion
        targetSdkVersion deps.build.targetSdkVersion
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {

        release {
            debuggable true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), '../../proguard.pro'
            signingConfig signingConfigs.debug
        }

    }

    sourceSets {
        main {
            jniLibs.srcDirs 'libs'
        }
    }

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }

}

dependencies {

    implementation project(':features:base')

    kapt deps.dagger.compiler
    kapt deps.dagger.androidCompiler

}

【问题讨论】:

    标签: dagger-2 android-instant-apps dagger


    【解决方案1】:

    问题是DrawExportComponent 看不到StateManager,因为后者是AppComponent 的一部分。

    与具有组件依赖关系的子组件不同,依赖组件无法访问所有父组件。您必须通过添加明确指定共享的内容:

    fun stateManager(): StateManager
    

    致您的AppComponent

    更多信息official documentation

    【讨论】:

    • 谢谢。这真的很有帮助。
    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    相关资源
    最近更新 更多