Android 库、Kotlin 和 Dagger2
Android Library, Kotlin and 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 文件,所以我通过将 src/main/kapt
添加到我的核心模块(lib ):
build.gradle(核心模块)
android {
...
sourceSets {
main.java.srcDirs += ['src/main/kotlin', 'src/main/kapt']
}
}
在那之后,核心模块开始寻找他们的 Dagger 2 生成的文件。
Java 模块应该有
plugins {
id("java-library")
id("kotlin")
id("kotlin-kapt")
}
java {
sourceSets {
main.java.srcDirs += ['build/generated/source/kapt/main']
}
}
我正在构建一个包含两个模块的应用程序:核心模块,即 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 文件,所以我通过将 src/main/kapt
添加到我的核心模块(lib ):
build.gradle(核心模块)
android {
...
sourceSets {
main.java.srcDirs += ['src/main/kotlin', 'src/main/kapt']
}
}
在那之后,核心模块开始寻找他们的 Dagger 2 生成的文件。
Java 模块应该有
plugins {
id("java-library")
id("kotlin")
id("kotlin-kapt")
}
java {
sourceSets {
main.java.srcDirs += ['build/generated/source/kapt/main']
}
}