Android库,Kotlin和Dagger2
我正在构建一个包含两个模块的应用程序:核心模块,即Android库(com.android.library)和应用程序模块(com.android.application)。
将Java文件转换为Kotlin后,该项目不编译,给我一个错误,没有找到生成的Dagger 2文件(未解决的参考)。 但是那些目前正在生成的文件是:
…核心\编译\生成的\源\ kapt \ {释放我的\核心\命名空间} \ 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(Project)
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生成的文件,所以我通过将src/main/kapt
添加到我的Core模块(lib)上的sourceSets配置来解决问题:
build.gradle(核心模块)
android { ... sourceSets { main.java.srcDirs += ['src/main/kotlin', 'src/main/kapt'] } }
之后,核心模块开始寻找他们的Dagger 2生成的文件。