/ KOTLIN, ANDROID STUDIO, GRADLE PLUGIN, BUILD TOOLS

안드로이드 스튜디오 3.0 (혹은 안드로이드 그래들 플러그인 3.0) 이상에서 코틀린 프로젝트를 빌드하는 경우 발생하는 호환성 문제를 해결하려면?

얼마 전 구글 I/O 2017에서 공개된 안드로이드 스튜디오 3.0 프리뷰 버전의 공개와 함께, 기존 대비 빌드 속도가 향상된 안드로이드 그래들 빌드 플러그인의 알파 버전(com.android.tools.build:gradle:3.0.0-alpha1)도 배포되었습니다.

코틀린이 안드로이드의 공식 지원 언어로 선정된 만큼, 안드로이드 스튜디오 3.0 프리뷰 버전에는 코틀린 언어 지원 기능이 내장되어 있습니다.

하지만, 내장된 기능을 사용하여 코틀린을 지원하는 프로젝트를 새로 생성할 경우 빌드가 되지 않는 문제가 있습니다. 아무리 프리뷰 버전이라곤 하지만 좀 많이 당황스럽긴 합니다.

안드로이드 스튜디오 3.0 프리뷰 (Canary 1 버전) 기준으로, 코틀린을 지원하는 프로젝트를 생성하는 경우 다음과 같은 환경을 설정합니다.

  • Gradle: gradle-4.0-milestone-1
  • Android Gradle Build Plugin: com.android.tools.build:gradle:3.0.0-alpha1
  • Kotlin Gradle Build Plugin: org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-3
  • Kotlin Standard Library: org.jetbrains.kotlin:kotlin-stdlib:1.1.2-3

이 환경으로 빌드를 시도할 경우, 다음 메시지가 나오며 빌드가 되지 않을 것입니다.

Error:Unable to find method 'com.android.build.gradle.internal.variant.BaseVariantData.getOutputs()Ljava/util/List;'.
Possible causes for this unexpected error include:

- Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.) Re-download dependencies and sync project (requires network)

- The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem. Stop Gradle build processes (requires restart)

- Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.

In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

이는 안드로이드 그래들 빌드 툴과 코틀린과 호환되지 않아 발생하는 이슈로, 코틀린 그래들 플러그인 버전을 1.1.2-5로 변경하면 해결할 수 있습니다.

즉, 프로젝트 루트 빌드스크립트 내 classpath 부분을 다음과 같이 변경하면 됩니다.

buildscript {
    repositories {
        maven { url 'https://maven.google.com' }
        jcenter()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:3.0.0-alpha1"
-       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-3"
+       classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-5"
    }
}

추가로, 코틀린 빌드 플러그인 버전과 표준 라이브러리(stdlib) 버전은 가급적 같게 유지하는 것이 좋습니다. 따라서 플러그인 버전과 함께 표준 라이브러리 버전도 1.1.2-5로 변경하는 것을 추천합니다.

주: 기존 버전에는 1.1.2-4로 업데이트 하는 것을 권장드렸었는데, 이는 DataBinding 라이브러리와 호환되지 않습니다.

따라서, 6/13일 코틀린에서 이 문제를 해결하여 1.2.2-5 버전을 업데이트 하였습니다. 자세한 업데이트 내용은 링크 를 참조하세요.

참고 링크:

추가 정보:

코틀린 그래들 플러그인 1.2.2-4 버전은 안드로이드 그래들 플러그인 2.3.2 이하 버전과 호환되지 않습니다.

안드로이드 그래들 플러그인 2.3.2를 사용하는 프로젝트에서 코틀린 그래들 플러그인 1.2.2-4를 사용하면 다음과 같은 에러 메시지가 나오며 빌드가 되지 않습니다. (제보해주신 정승욱님님께 감사드립니다)

* What went wrong:
Circular dependency between the following tasks:
:app:compileReleaseKotlin
\--- :app:kaptReleaseKotlin
     \--- :app:compileReleaseKotlin (*)

(*) - details omitted (listed previously)
kunny

커니

안드로이드와 오픈소스, 코틀린(Kotlin)에 관심이 많습니다. 한국 GDG 안드로이드 운영자 및 GDE 안드로이드로 활동했으며, 현재 구글에서 애드몹 기술 지원을 담당하고 있습니다.

Read More