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"