将android java项目转换为android kotlin项目

时间:2019-03-22 22:46:35

标签: android kotlin dagger-2

几周前,我决定开始将现有应用程序(我用Java编写)转换为kotlin。 我只转换了一个活动,所以我想检查功能,然后再继续前进并更改所有类。 不幸的是,我收到以下错误:

output.next

这是我通过此活动解决依赖关系的方式,将从onCreate方法中调用以下代码:

SearchActivity.kt

Unresolved reference: DaggerSearchComponent

SearchComponent.java

 override fun resolveDependency() {
    DaggerSearchComponent.builder()
            .applicationComponent(applicationComponent)
            .searchModule(SearchModule(this))
            .build().inject(this)

}

此活动的组件仍然是用Java编写的,尽管我尝试使用kotlin进行转换,但出现了相同的错误。

我在build.gradle(Module:app)中添加了kotlin插件

@PerActivity
@Component(modules = SearchModule.class, dependencies = ApplicationComponent.class)
public interface SearchComponent {

    void inject(SearchActivity activity);

}

build.gradle(项目)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-android'

除了在应用gradle文件中添加kotlin插件外,我没有找到任何其他有用的信息,但是它对我不起作用。

使用dagger2时是否可以在Java中使用kotlin,还是我需要在测试之前将每个组件/模块都转换为kotlin?

1 个答案:

答案 0 :(得分:2)

确保在模块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)

}