使用 'kotlin-kapt' 插件,Android Studio 不提供有关 Dagger 2 的特定错误
With 'kotlin-kapt' plugin, Android Studio doesnt provide specific errors about Dagger 2
我将 Kotlin 与 Dagger 2 一起使用。问题是,当我在实现 Dagger 时出错(例如,class 构造函数未命中 @Inject
),IDE 没有具体显示在哪里错误是。 Insead 编译器错误始终相同:
Execution failed for task ':app:kaptDebugKotlin'.
Internal compiler error. See log for more details
Class 故意错误(评论@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()
}
选项 1
使用apply plugin: 'kotlin-kapt'
。当发生错误时,您可以在 Android Studio => 右下角 => 在 Gradle 控制台中看到它。
感谢 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 cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
像 this, this or that 这样的教程说可以使用 apply plugin: 'kotlin-kapt'
而不是 kapt { generateStubs = true }
。但在那种情况下 Android Studio 不提供具体的编译错误。
解决方案是将此添加到模块的 build.gradle:
kapt {
correctErrorTypes = true
}
我将 Kotlin 与 Dagger 2 一起使用。问题是,当我在实现 Dagger 时出错(例如,class 构造函数未命中 @Inject
),IDE 没有具体显示在哪里错误是。 Insead 编译器错误始终相同:
Execution failed for task ':app:kaptDebugKotlin'. Internal compiler error. See log for more details
Class 故意错误(评论@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()
}
选项 1
使用apply plugin: 'kotlin-kapt'
。当发生错误时,您可以在 Android Studio => 右下角 => 在 Gradle 控制台中看到它。
感谢 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 cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
像 this, this or that 这样的教程说可以使用 apply plugin: 'kotlin-kapt'
而不是 kapt { generateStubs = true }
。但在那种情况下 Android Studio 不提供具体的编译错误。
解决方案是将此添加到模块的 build.gradle:
kapt {
correctErrorTypes = true
}