#android #kotlin #dagger-2
#Android #kotlin #dagger-2
Вопрос:
Несколько недель назад я решил начать преобразование моего существующего приложения (я написал его на Java) в kotlin. Я преобразовал только одно действие и хотел проверить функциональность, прежде чем двигаться дальше и изменять все свои классы. К сожалению, я получаю следующую ошибку:
Unresolved reference: DaggerSearchComponent
Вот как я разрешаю свои зависимости с помощью этого действия, этот код будет вызываться из метода onCreate:
SearchActivity.kt
override fun resolveDependency() {
DaggerSearchComponent.builder()
.applicationComponent(applicationComponent)
.searchModule(SearchModule(this))
.build().inject(this)
}
SearchComponent.java
@PerActivity
@Component(modules = SearchModule.class, dependencies = ApplicationComponent.class)
public interface SearchComponent {
void inject(SearchActivity activity);
}
Компонент этого действия по-прежнему написан на Java, хотя я пытался преобразовать его с помощью kotlin, но я получил ту же ошибку.
Я добавил плагин kotlin в свой build.gradle (модуль: приложение)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'
build.gradle(проект)
apply plugin: 'kotlin-kapt'
buildscript {
ext.kotlin_version = '1.3.21'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Я не нашел никакой другой полезной информации, кроме добавления плагина kotlin в файл app gradle, но у меня это не сработало.
При использовании dagger2 возможно ли использовать kotlin с java или мне нужно преобразовать каждый компонент / модуль в kotlin перед его тестированием?
Ответ №1:
Убедитесь, что вы добавили эти зависимости в модуль gradle:
implementation "com.google.dagger:dagger:$rootProject.dagger2Version"
implementation "com.google.dagger:dagger-android:$rootProject.dagger2Version"
implementation "com.google.dagger:dagger-android-support:$rootProject.dagger2Version"
kapt "com.google.dagger:dagger-android-processor:$rootProject.dagger2Version"
kapt "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
testAnnotationProcessor "com.google.dagger:dagger-compiler:$rootProject.dagger2Version"
И добавьте
apply plugin: 'kotlin-kapt'
также в gradle на уровне модуля.
Внесите изменения в SearchComponent (Kotlin)
@PerActivity
@Component(modules = [SearchModule.class::class], dependencies = [ApplicationComponent::class])
interface SearchComponent {
fun inject(application: Application)
}