Android库,Kotlin和Dagger2

时间:2017-05-12 17:48:20

标签: android kotlin android-library dagger-2 kapt

我正在构建一个包含两个模块的应用程序:Core模块,即Android库(com.android.library)和Application模块(com.android.application)。

将Java文件转换为Kotlin之后,项目没有编译,给我一个错误,即找不到生成的Dagger 2文件(未解析的引用)。但是目前正在生成的文件:

  

...芯\构建\产生\源\ kapt \释放{我\芯\命名空间} \ DaggerBaseComponent.java


我缺少什么?


build.gradle(核心模块)

class


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"
}


ApplicationContext.kt(我的核心模块)

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"
    }
}

2 个答案:

答案 0 :(得分:3)

问题是Gradle没有找到kapt生成的Dagger文件,所以我通过将src/main/kapt添加到我的Core模块(lib)上的sourceSets配置来解决问题:

build.gradle(核心模块)

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


之后,Core模块开始寻找他们的Dagger 2生成文件。

答案 1 :(得分:0)

Java模块应该具有

plugins {
    id("java-library")
    id("kotlin")
    id("kotlin-kapt")
}

java {
    sourceSets {
        main.java.srcDirs += ['build/generated/source/kapt/main']
    }
}