DaggerAppComponent не создан

С кинжалом 2.10 Раньше я мог создавать компонент приложения, делая

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

Я уже использовал AndroidInjector for Activities, и все было в порядке. Теперь я переключился на 2.11, и я не могу найти способ создания компонента приложения. В учебнике Google я вижу:

DaggerYourApplicationComponent.create()
    .inject(this);

для добавления в onCreate Application. В моем случае 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"

Ответы

Ответ 1

Ok Извините за шум. Моя глупая ошибка: когда я переключился на 2.11, я скопировал секцию build.gradle из учебника Google, где зависимость:

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"
}

Ответ 2

В Kotlin нам нужно добавить плагин kapt для компилятора, чтобы использовать Dagger 2.

В своем приложении gradle добавьте этот плагин

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"
}

См. Документацию Котлина

Ответ 3

Последняя версия Dagger2 поддерживает только следующие настройки Gradle: https://github.com/google/dagger#gradle

def daggerVer = 2.24 // or latest version
api "com.google.dagger:dagger:$daggerVer"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVer"
api "com.google.dagger:dagger-android:$daggerVer"
api "com.google.dagger:dagger-android-support:$daggerVer" // if you use the support libraries
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVer"