首页 > 解决方案 > 当 dagger 不自动生成组件代码时对 gradle 文件进行故障排除

问题描述

更新:链接到项目-> https://drive.google.com/open?id=1D8mYZL3Pb8FezPp5FOKA20-Um5kTRYxH

我一直从 Dagger 开始,并按照本教程直到步骤 5.4:https ://www.vogella.com/tutorials/Dagger/article.html#special-treatment-of-fields-in-dagger

我添加了以下依赖项:

    api 'com.google.dagger:dagger:2.20'
    api 'com.google.dagger:dagger-android:2.20'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.20'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.20'
    compileOnly 'javax.annotation:jsr250-api:1.0'

但 IDE 无法解析“DaggerMyApplicationComponent”(在 onCreate() 中)。似乎 Dagger 无法生成代码。

我的应用程序.java

import android.app.Activity;
import android.app.Application;

import javax.inject.Inject;

import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;

public class MyApplication extends Application implements HasActivityInjector {

    @Inject
    DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;

    @Override
    public void onCreate() {
        super.onCreate();
        DaggerMyApplicationComponent.create().inject(this);
    }

    @Override
    public DispatchingAndroidInjector<Activity> activityInjector() {
        return dispatchingAndroidInjector;
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.parassidhu.daggerkumar">

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MyApplicationModule.java

import dagger.Module;
import dagger.android.ContributesAndroidInjector;

@Module
public abstract class MyApplicationModule {

    @ContributesAndroidInjector
    abstract MainActivity contributeActivityInjector();
}

MyApplicationComponent.java

import javax.inject.Singleton;

import dagger.Component;
import dagger.android.AndroidInjectionModule;
import dagger.android.AndroidInjector;

@Singleton
@Component(modules = {AndroidInjectionModule.class, MyApplicationModule.class})
public interface MyApplicationComponent extends AndroidInjector<MyApplication> {

}

请提出什么可能是错的。我已经尝试过几次 Make Project、Clean、Rebuild、Invalidate 和 Restart,但没有任何帮助。

标签: androidandroid-gradle-plugindagger-2

解决方案


正如评论中所讨论的,从 gradle 中删除所有不必要的 kotlin 依赖项和插件。如果您的项目中没有 kotlin 代码,那么将您的模块称为 kotlin 模块是没有意义的。Dagger 认为它应该生成 kotlin 代码,但它没有 kotlin 编译器来执行此操作。因此,要么将整个代码更改为 kotlin 并使用 kotlin 依赖项,要么坚持使用 java 并删除所有 kotlin 依赖项。


推荐阅读