2017-09-11 7 views
0

Dagger 2でKotlinを使用しています.Daggerを実装しているときに間違いを犯した場合(IDE constntorの場合は@Inject)間違いがどこにあるかを具体的に示します。 INSEADのコンパイラエラーが常に同じである:'kotlin-kapt'プラグインを使用すると、AndroidスタジオでDagger 2に関する特定のエラーが表示されない

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 
} 

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

クラス意図的な間違いと(@Injectコメント)

モジュールビルド:

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

あなたはGradleのログにエラーを見つけることができます。 Android Studioの右下にある[Gradle Console]をクリックします。そこにはエラーが表示されます。 –

+0

@ DavidMedenjakの答えは、明らかに、今のところ最高です。 AndroidStudioは 'kapt'エラーをまだ処理していないようです。あなたの指を渡す。 –

答えて

3

オプション1

使用apply plugin: 'kotlin-kapt'。そして、エラーが発生した場合は、Android Studioで見ることができます=>右下に表示されます=> Gradle Consoleで表示されます。

David Medenjakのコメントに感謝します。

kapt { generateStubs = true }

コンパイルと

apply plugin: 'kotlin-kapt'

代替オプション2は、予想される結果で失敗:

[com.example.kravets_a.kotlinanddagger.logic.MainActivityComponent.inject(COMを。 example.kotlinanddagger.MainActivity)] com.example.kotlinanddagger.logic.LoginPresenterは@Injectコンストラクタなしでは提供できません。 @ Produces-annotatedメソッド。 thisthisまたはthatなどの

チュートリアルapply plugin: 'kotlin-kapt'代わりにkapt { generateStubs = true }を使用することができることを言います。しかし、その場合、Android Studioは特定のコンパイルエラーを提供しません。

0

ソリューションは、あなたのモジュールのbuild.gradleにこれを追加することです:

kapt { 
    correctErrorTypes = true 
} 
+0

私はkaptの公式の勧告に従ってこれを最近試みましたが、それでも失敗しています。すなわち「NonExistentClass」がまだ追加されています – takecare

関連する問題