4

我将 Kotlin 与 Dagger 2 一起使用。问题是,当我在实现 Dagger 时出错(例如,@Inject类构造器的错误)时,IDE 不会具体显示错误在哪里。Insead 编译器错误总是一样的:

Execution failed for task ':app:kaptDebugKotlin'. Internal compiler error. See log for more details

故意犯错的班级(@Inject 评论):

class LoginPresenter //@Inject
constructor(private val request: LoginRequest)

项目 build.gradle 文件:

buildscript {
    ext.kotlin_version = '1.1.4-3'

    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

模块 build.gradle:

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

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.example.kravets_a.kotlinanddagger"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    ...

    compile 'com.google.dagger:dagger:2.10'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.10'
    kapt "com.google.dagger:dagger-compiler:2.10"

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
}
repositories {
    mavenCentral()
}
4

2 回答 2

6

选项1

使用apply plugin: 'kotlin-kapt'. 当发生错误时,您可以在 Android Studio => 右下角 => 在 Gradle Console 中看到它。

感谢 David Medenjak 的评论。

选项 2

替换apply plugin: 'kotlin-kapt'kapt { generateStubs = true }

编译失败并出现预期结果:

[com.example.kravets_a.kotlinanddagger.logic.MainActivityComponent.inject(com.example.kotlinanddagger.MainActivity)] com.example.kotlinanddagger.logic.LoginPresenter 不能在没有 @Inject 构造函数或 @Provides- 或 @Produces 的情况下提供-注释方法。

像这样的教程,这个那个apply plugin: 'kotlin-kapt'可以用来代替kapt { generateStubs = true }。但在这种情况下,Android Studio 不提供特定的编译错误。

于 2017-09-11T13:31:24.437 回答
1

解决方案是将其添加到模块的 build.gradle 中:

kapt {
    correctErrorTypes = true
}
于 2017-12-08T14:14:16.460 回答