【问题标题】:With 'kotlin-kapt' plugin, Android Studio doesnt provide specific errors about Dagger 2使用 'kotlin-kapt' 插件,Android Studio 不提供有关 Dagger 2 的特定错误
【发布时间】:2017-09-11 13:31:24
【问题描述】:

我将 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
}

模块构建.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()
}

【问题讨论】:

  • 可以在gradle日志中找到错误。在 Android Studio 中,点击右下角的Gradle Console。那里会显示错误。
  • @DavidMedenjak 的答案显然是目前最好的。 AndroidStudio 似乎还没有处理 kapt 错误。交叉手指。

标签: android kotlin dagger-2 kapt


【解决方案1】:

选项 1

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

感谢 David Medenjak 的评论。

选项 2

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

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

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

thisthisthat 等教程表示可以使用 apply plugin: 'kotlin-kapt' 代替 kapt { generateStubs = true }。但在这种情况下,Android Studio 不会提供具体的编译错误。

【讨论】:

    【解决方案2】:

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

    kapt {
        correctErrorTypes = true
    }
    

    【讨论】:

    • 我最近尝试过这个,按照 kapt 的官方建议,但它仍然失败。即NonExistentClass仍在添加中
    猜你喜欢
    • 2019-04-11
    • 2018-04-13
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多