기본적인 코틀린 세팅

참고: Getting started with Android and Kotlin

[build.gradle]

buildscript {
    dependencies {
        // ...
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.1'
    }
}

[app/build.gradle]

apply plugin: 'kotlin-android'

android {
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

dependencies {
    // ...
    compile 'org.jetbrains.kotlin:kotlin-stdlib:1.1.1'
    // ...
}

Error: Unresolved reference: Dagger…Component

여기까지 완료하고 빌드를 하면 위의 메시지와 함께 실패한다.
이는 Dagger2의 자바 어노테이션 프로세싱을 지원하지 않아 생긴 문제로, 해결하기 위해서는 Kotlin Annotation Processing Tool 관련 코드를 추가해야 한다.

참고 링크

[app/build.gradle]

apply plugin: 'kotlin-kapt'

dependencies {
    // ...
    kapt 'com.google.dagger:dagger-compiler:2.8'
    // ...
}

Error: Some error(s) occurred while processing annotations. Please see the error messages above.

하지만 다시 빌드를 해도 위의 메시지와 함께 실패한다.
이유는 첫 번째와 같고 이번에는 DataBinding 어노테이션으로 인해 발생한 문제이다. 아래의 코드를 추가하면 빌드 성공!

[app/build.gradle]

dependencies {
    // ...
    kapt 'com.android.databinding:compiler:2.3.1'
    // ...
}

DataBinding error(s) ing…

아직 이 문제에 대한 정확한 해결책은 아니지만, DataBinding 대신 Kotlin Android Extensions 를 사용하는 것으로 문제를 피해가자!

Extensions를 이용하면 별도의 뷰 인스턴스 선언 없이 id에 바로 접근하여 사용할 수 있다. 뷰의 id를 참조하게 되면 자동으로 import kotlinx.android.synthetic.{sourceSet}.{layout}.* 가 추가된다.

이전에 추가했던 kapt ‘com.android.databinding:compiler:2.3.1’ 코드는 필요가 없어지니 삭제한다. 그리고 아래의 플러그인을 추가하면 사용할 수 있다.

[app/build.gradle]

apply plugin: 'kotlin-android-extensions'