web-dev-qa-db-ja.com

ダガー@ContributesAndroidInjector ComponentProcessorはこのインターフェイスを処理できませんでした

ダガーの新機能をテストしていました:Android module。そして@ContributesAndroidInjectorを使用するときにコードをコンパイルできません。常に次のエラーが発生します:

エラー:(12、8)エラー:dagger.internal.codegen.ComponentProcessorは、すべての依存関係を解決できなかったため、このインターフェイスを処理できませんでした。生成されたコードでコンパイルエラーまたは循環依存関係を確認します。

here のようなコンポーネントを実装しようとしましたが、それでもエラーが発生しました。

最小の例を次に示します。

@PerApplication
@Component(modules = {AndroidInjectionModule.class, LoginBindingModule.class})
public interface ApplicationComponent {
    void inject(ExampleApplication application);
}

@Module
public abstract class LoginBindingModule {
    @ContributesAndroidInjector
    abstract LoginActivity contributeYourActivityInjector();
}

public class LoginActivity extends Activity {

    @Inject
    LoginPresenter loginPresenter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        AndroidInjection.inject(this);
        super.onCreate(savedInstanceState);
    }
}

public class LoginPresenter {

    @Inject
    public LoginPresenter() {

    }
}

ApplicationComponentからLoginBindingModuleを削除すると、アプリはビルドされますが、実行時例外で失敗します。

Java.lang.IllegalArgumentException:クラスにバインドされたインジェクターファクトリがありません

プロジェクトのセットアップ:

gradle 3.3
buildToolsVersion "25.0.2"
dagger 2.11
11

annotationProcessor "com.google.dagger:dagger-Android-processor:2.11"をgradleファイルに追加すると、問題が解決します。

16
Patrick

私の場合、SomeModuleクラスには不要な行が含まれていました。

@ContributesAndroidInjector
internal abstract fun fragmentInjector(): SomeFragment
2
CoolMind

提案された解決策のいずれも機能しない場合は、依存関係のいずれかに@Providesアノテーションを追加するのを忘れたかどうかを確認してください。これは私の場合の問題でした

0
Muhammed Ashraf

同じエラーが発生しましたが、問題はDaggerモジュールを宣言したモジュール(プロジェクト)にありました。必ずkotlin-kaptプラグインを追加してください。追加しないと、Daggerはクラスを生成できません。

// declare it at the top of your build.gradle file
apply plugin: 'kotlin-kapt'
0
gyosida

Kotlinの場合、代わりに

annotationProcessor com.google.dagger:dagger-Android-processor:2.11

使用する

kapt com.google.dagger:dagger-Android-processor:2.11
0
Misha Akopov

モジュールファイルをKotlinに変換すると、非常に奇妙なエラーが発生しました。それはまれかもしれませんが、おそらく他の誰かが同じ問題に出くわします:

私のDaggerモジュールはGradleモジュールの一部です。 api Gradle構成のみを持つ依存関係を使用します。 Daggerは、関連するすべてのKotlinクラスに対してスタブ(Java)ファイルを生成します。これらの潜水艦がなければ、すべてが機能しました。これらのスタブでは、上記のエラーが発生しました。不足しているすべての依存関係をGradleモジュールに追加することが、私にとっての解決策でした。

0
dipdipdip