web-dev-qa-db-ja.com

DaggerAppComponentは作成されません

ダガー2.10では、次のようにしてアプリコンポーネントを作成できました。

    sAppComponent = DaggerAppComponent.builder()
            .appModule(new AppModule(this))
            .sessionModule(new SessionModule())
            .netModule(new NetModule())
            .dataModule(new DataModule())
            .build();

私はすでにアクティビティにAndroidInjectorを使用しており、すべてが順調でした。今では2.11に切り替えましたが、アプリコンポーネントを作成する方法が見つかりません。 googleチュートリアル で:

DaggerYourApplicationComponent.create()
    .inject(this);

アプリケーションのonCreateに追加されます。私の場合 DaggerYourApplicationComponent = DaggerAppComponent。問題は、DaggerAppComponentクラスがもう作成されていないことです。

私が持っています:

public class App extends Android.support.multidex.MultiDexApplication implements HasActivityInjector {
    @Inject DispatchingAndroidInjector<Activity> mDispatchingActivityInjector;
    @Override
    public void onCreate() {
        super.onCreate();

        sAppComponent = DaggerAppComponent.create().inject(this); //here the error

そして:

@Singleton
@Component(modules = {
        AppModule.class,
        MainActivityModule.class,
        ...
})
public interface AppComponent {
        void inject(App app);
        ...
}

私が持っているbuild.gradleファイル:

def daggerVer = 2.11
compile "com.google.dagger:dagger:$daggerVer"
compile "com.google.dagger:dagger-Android-support:$daggerVer"
annotationProcessor "com.google.dagger:dagger-Android-processor:$daggerVer"
18
kingston

ノイズでごめんね。私の愚かな間違い:2.11に切り替えたときに、build.gradleセクションを google tutorial からコピーしました。

annotationProcessor "com.google.dagger:dagger-compiler:$daggerVer"

私が知らない理由でリストされていません。以下にリストされた依存関係ですべてが機能します:

def daggerVer = 2.12 // or latest version

implementation "com.google.dagger:dagger:$daggerVer"
implementation "com.google.dagger:dagger-Android-support:$daggerVer"
annotationProcessor "com.google.dagger:dagger-Android-processor:$daggerVer"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVer"

Kotlinを使用している場合

apply plugin: 'kotlin-kapt'

dependencies {
    def daggerVer = 2.12 // or latest version

    implementation "com.google.dagger:dagger:$daggerVer"
    implementation "com.google.dagger:dagger-Android-support:$daggerVer"
    kapt "com.google.dagger:dagger-Android-processor:$daggerVer"
    kapt "com.google.dagger:dagger-compiler:$daggerVer"
}
43
kingston

Kotlinでは、kaptコンパイラプラグインを追加して、Dagger 2を使用する必要があります。

アプリのグラドルで、このプラグインを追加します

apply plugin: 'kotlin-kapt'

そして、以下のように依存関係を追加します

dependencies
{
    implementation "com.google.dagger:dagger:$latest_version"
    kapt  "com.google.dagger:dagger-compiler:$latest_version"
    implementation "com.google.dagger:dagger-Android:$latest_version"
    kapt  "com.google.dagger:dagger-Android-processor:$latest_version"
    implementation "com.google.dagger:dagger-Android-support:$latest_version"
    kapt  "com.google.dagger:dagger-Android-support:2.12"
}

Kotlinを参照してください ドキュメント

7
FAЯAƸ