【问题标题】:Error: cannot find symbol variable DaggerAppComponent错误:找不到符号变量 DaggerAppComponent
【发布时间】:2017-12-28 07:20:40
【问题描述】:

在尝试集成最新的 Dagger 2 版本时,我遇到了 Dagger 自动生成的问题。尽管进行了多次 Rebuild 和 Make Module App 过程,但 Dagger 不会自动生成 DaggerAppComponent。

应用类:

public class BaseApplication extends Application
{
    private AppComponent appComponent;

    @Override
    public void onCreate()
    {
        super.onCreate();
        initAppComponent();
    }

    private void initAppComponent()
    {
        DaggerAppComponent.builder()
                .appModule(new AppModule(this))
                .build();
    }

    public AppComponent getAppComponent()
    {
        return appComponent;
    }
}

应用组件

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent
{
    void inject(BaseApplication application);
}

AppModule:

@Module
public class AppModule
{
    private BaseApplication application;

    public AppModule(BaseApplication app)
    {
        application = app;
    }

    @Provides
    @Singleton
    Context provideContext()
    {
        return application;
    }

    @Provides
    Application provideApplication()
    {
        return application;
    }
}

使用的依赖:

compile 'com.google.dagger:dagger-android:2.11'
compile 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
androidTestCompile 'com.google.code.findbugs:jsr305:3.0.1'

我们将非常感谢您在这方面的任何帮助。

【问题讨论】:

  • 你能粘贴你在构建时得到的日志吗?
  • 问题在哪里?为什么不发布错误日志?给你问题的读者一些接缝。

标签: android dependency-injection dagger-2 dagger


【解决方案1】:

好像我使用了错误的依赖项:

compile 'com.google.dagger:dagger-android:2.x'
compile 'com.google.dagger:dagger-android-support:2.x' // if you use the support libraries
annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'

如果你在 dagger.android 中使用类,则应该使用上述依赖项。

正确的依赖是:

compile 'com.google.dagger:dagger:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'

【讨论】:

  • 我已经看过很多次了——使用“dagger.android 中的类”是什么意思?
  • 没错,我也有类似@az4dan 的问题。
  • 如果您使用 kapt for Java,将其更改为 annotationProcessor 就可以了。我以为我在某处读到 kapt 对 Java 也适用,但在某些情况下它似乎有问题!
【解决方案2】:

你需要这两行

implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'

在使用 kotlin 时使用 kapt 而不是 annotationProcessor。 生成的类如 Dagger+AppComponentClass, eg:DaggerAppComponent

【讨论】:

    【解决方案3】:

    添加以下依赖项为我解决了 Java 项目的问题

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

    对于 Kotlin 项目(添加 kotlin-kapt 后):

    kapt "com.google.dagger:dagger-compiler:2.27"
    

    【讨论】:

    • 你可以试试:kapt "com.google.dagger:dagger-compiler:2.26"
    【解决方案4】:

    我遇到了同样的问题...解决我的问题的方法实际上是将视图模型添加到 ViewmodelModulle,然后将注释 @Inject 添加到我的视图模型的构造函数中。这对你来说可能是一个不同的问题,但在我的情况下,这真的很有帮助。我的代码编译没有任何问题

    @Inject

    public MessageViewModel(Application application) {
        super(application);
        mApp = application;
    

    【讨论】:

    • 谢谢您的回答。这不是一个确切的问题,但它帮助我查看了注释,我发现我缺少一些要提及的注释,一旦我提到错误就消失了。但我想知道问题是不同的,我们遇到了不同的错误,应该如何了解完全相同的问题。
    【解决方案5】:

    尝试,转到文件和

    无效并重新启动

    【讨论】:

      【解决方案6】:

      1.清理项目 2.重建 3.File-->失效并重启

      【讨论】:

        【解决方案7】:

        需要运行你的APP一次才能生成“DaggerAppComponent”

        【讨论】:

        • 你的意思是“你需要运行你的APP一次来生成”DaggerAppComponent“”?
        【解决方案8】:

        把代码改成这个,

         private void initAppComponent()
        {
        /*    DaggerAppComponent.builder()
                            .appModule(new AppModule(this))
                            .build();*/
                appComponent = DaggerAppComponent.builder()
                        .appModule(new AppModule(this))
                        .build();
                appComponent .inject(this)
            }
        

        其他的都是

        @Singleton
        @Component(modules = AppModule.class)
        public interface AppComponent
        {
            void inject(BaseApplication application);
        }
        

        为什么需要在构建组件的地方注入相同的类,您可以轻松地在 Application 类上获取上下文和应用程序。 Dagger 可以帮你找到依赖类。

        【讨论】:

          猜你喜欢
          • 2018-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多