Преобразование Android java project в Android kotlin project

#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)

}