2017-09-11 23 views
0

Dagger 2와 Kotlin을 사용합니다. Dagger를 구현하는 동안 실수 할 때 (예 : 클래스 constractor에 @Inject을 놓친 경우) 특히 실수가 어디에 있는지 보여줍니다. INSEAD 컴파일러 오류가 항상 동일합니다 :'kotlin-kapt'플러그인을 사용하면 Android Studio가 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 주석)

모듈 빌드. 단계 :

012 3,516,
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'. 오류가 발생하면 Gradle Console의 Android Studio => 오른쪽 하단 =>에서 확인할 수 있습니다.

David Medenjak comment 감사합니다.

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 메서드.

튜토리얼이 좋아 this, this 또는 thatapply plugin: 'kotlin-kapt' 대신 kapt { generateStubs = true } 사용할 수 있습니다 있다고 말한다. 그러나이 경우 Android Studio는 특정 컴파일 오류를 제공하지 않습니다.

0

이 솔루션은 모듈의 build.gradle이를 추가하는 것입니다

kapt { 
    correctErrorTypes = true 
} 
+0

kapt에 대한 공식 권장 사항에 따라 최근에 시도했지만 아직 실패합니다. 즉 NonExistentClass가 계속 추가되고 있습니다. – takecare