其他分享
首页 > 其他分享> > Android库,Kotlin和Dagger2

Android库,Kotlin和Dagger2

作者:互联网

我正在构建一个具有两个模块的应用程序:核心模块,即Android库(com.android.library)和应用程序模块(com.android.application).

将Java文件转换为Kotlin之后,该项目无法编译,并给我一个错误,指出未找到生成的Dagger 2文件(未解决的参考).但是,这些文件当前在以下位置生成:

…core\build\generated\source\kapt\release{my\core\namespace}\DaggerBaseComponent.java

我想念的是什么?

build.gradle(核心模块)

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

...

android {
    ...
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    ...
    // Dagger.
    kapt "com.google.dagger:dagger-compiler:2.10"
    compile 'com.google.dagger:dagger:2.10'
    provided 'javax.annotation:jsr250-api:1.0'

    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

build.gradle(应用程序模块)

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

...

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    ...
    // Dagger.
    kapt "com.google.dagger:dagger-compiler:2.10"
    compile 'com.google.dagger:dagger:2.10'
    provided 'javax.annotation:jsr250-api:1.0'

    // Kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

build.gradle(项目)

buildscript {
    ext.kotlin_version = '1.1.2-3'
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.2'

        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

(我的核心模块的)ApplicationContext.kt

class ApplicationContext : Application() {
    var baseComponent: BaseComponent? = null
        private set

    override fun onCreate() {
        super.onCreate()

        initializeInjector()
    }

    private fun initializeInjector() {
        // DaggerBaseComponent is and unresolved reference
        baseComponent = DaggerBaseComponent.builder() 
                .appModule(AppModule(this))
                .endpointModule(EndpointModule())
                .build()
    }

    companion object {

        operator fun get(context: Context): ApplicationContext {
            return context.applicationContext as ApplicationContext
        }
    }
}

解决方法:

问题是Gradle无法通过kapt找到Dagger生成的文件,因此我通过在核心模块(lib)的sourceSets配置中添加src / main / kapt来解决了这个问题:

build.gradle(核心模块)

android {
    ...
    sourceSets {
        main.java.srcDirs += ['src/main/kotlin', 'src/main/kapt']
    }
}

之后,Core模块开始查找其Dagger 2生成的文件.

标签:android-library,dagger-2,kotlin,kapt,android
来源: https://codeday.me/bug/20191111/2019439.html