首页 > 解决方案 > 将android java项目转换为android kotlin项目

问题描述

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

Unresolved reference: DaggerSearchComponent

这就是我使用此活动解决依赖关系的方法,将从 onCreate 方法中调用此代码:

搜索活动.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 转换它,但我得到了同样的错误。

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

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 插件添加到应用程序 gradle 文件之外,我没有找到任何其他有用的信息,但它对我不起作用。

使用 dagger2 时是否可以将 kotlin 与 java 一起使用,或者我是否需要在测试之前将每个组件/模块转换为 kotlin?

标签: androidkotlindagger-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)

}

推荐阅读