Android Studio 3.0.0에서 데이터 바인딩 및 Kotlin을 사용하는 방법


99

Android Studio 3.0.0을 사용하기 시작했지만 프로젝트를 빌드하려고 할 때마다이 오류가 발생합니다.

Error:Circular dependency between the following tasks:
:app:compileDebugKotlin
+--- :app:dataBindingExportBuildInfoDebug
|    \--- :app:compileDebugKotlin (*)
\--- :app:kaptDebugKotlin
     \--- :app:dataBindingExportBuildInfoDebug (*)
(*) - details omitted (listed previously)

나는 사용하고있다

kapt "com.android.databinding:compiler:2.2.0"

사용하기 전에

androidProcessor "com.android.databinding:compiler:2.2.0"

그리고 그것은 잘 작동하고 있었다 ... 내가 뭘 잘못하고 있니 ??

감사!


1
버그처럼 보임
Vyacheslav Gerasimov

이 버그는 데이터 바인딩 없이도 나타납니다. 1.1.2-4 버전의 kotlin을 사용하고 플러그인 'kotlin-kapt'를 적용하십시오. 그런 다음이 오류가 발생합니다. 오류 : 다음 작업 간의 순환 종속성 : : app : compileDebugKotlin \ --- : app : kaptDebugKotlin \ --- : app : compileDebugKotlin ( ) ( )-세부 정보 생략 (이전에 나열 됨)
Arsenius

답변:


20

데이터 바인딩을 추가하려면 모듈 수준에서 앱 .gradle에 3 개의 gradle 항목이 필요한 것 같습니다.

  1. apply plugin: 'kotlin-kapt'
  2. android { ... dataBinding { enabled = true } }
  3. dependencies { ...... kapt "com.android.databinding:compiler:$compiler_version" }

단일 위치에서 관리 할 수 ​​있도록 프로젝트 수준 빌드 gradle에서 컴파일러 버전을 변수로 만들었습니다.

기본값은 다음과 같습니다. ext.kotlin_version = '1.1.3-2'

대괄호 구문으로 추가했습니다.

ext{
    kotlin_version = '1.1.3-2'
    compiler_version = '3.0.0-beta6'
}

1
이것은 kotlin-kapt와 해당 종속성 라인을 추가하는 정답입니다. 상위 답변은 더 이상 관련이 없습니다
SpaceMonkey

버전 변수의 사용을
좋아함

나는 점점 오전 : - 모든 버전 [kapt]은 예외가 발생했습니다 : java.lang.NullPointerException이
파벨 Zaitsev

한동안 @PavelZaitsev 내가 사용하지 않은 안드로이드 스튜디오
오리 고무

78

UPD : 이것은 Android Gradle 플러그인 3.0.0-alpha3에서 수정되었습니다. 프로젝트 루트 build.gradle에서 buildscript dependencies사용하도록 변경하십시오.

classpath 'com.android.tools.build:gradle:3.0.0-alpha3'

이것은 실제로 작업의 입력 및 출력이 설정되는 방식 (따라서 작업이 의존 관계).

KT- 17936 문제를 만들어 주신 @VyacheslavGerasimov 에게 감사드립니다 .


임시 해결 방법으로 Kotlin Gradle 플러그인 1.1.2-2로 되돌리고 증분 컴파일을 비활성화 할 수 있습니다.

프로젝트의 root build.gradle에서 Kotlin Gradle 플러그인의 버전을 변경합니다.

buildscript {
    ...
    dependencies {
        ...
        classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-2'
    }
}

local.properties다음 줄을 사용하여 프로젝트 루트에 추가 합니다.

kotlin.incremental=false

Kotlin Gradle 플러그인 1.1.2-2 이하가 최신 AGP 버전과 충돌 하는 것은 알려진 문제 이며 증분 컴파일을 비활성화하면 충돌이 해결되는 것 같습니다.


난 당신이 gradle.properties 의미 생각
레안드로 보르헤스 페레이라

1
@LeandroBorgesFerreira, Gradle이 local.properties프로젝트 에서 파일을 감지하고 해석하기 때문에 어느 것이 든 사용할 수 있습니다. 글쎄, 아마도 로컬 머신 속성에 local.properties더 적합 할 것 입니다 .
핫키

1
이로 인해 다음 오류가 발생합니다. stackoverflow.com/questions/44056104/…
gderaco

6
실제로 1.1.2-3으로 되 돌리는 것도 잘 작동합니다. 안드로이드 스튜디오 2.3.2 및 Gradle을 2.3.2와 같은 문제는 코 틀린-kapt 플러그인 코 틀린 1.1.2-4 함께 사용시
Arsenius

1
@hotkey based on issuetracker.google.com/issues/38447344 이것은 kotlin gradle 플러그인이 아니라 Android 플러그인의 문제입니다. 수정이 이루어졌으며 다음 3.0.0 알파 릴리스에서 릴리스 될 예정입니다.
Nimrod Dayan

17

적절한 솔루션을 찾는 사람들을 위해 Google은 이미 Android Studio 3.0 Canary 3 빌드 에서이 문제를 해결했습니다 .

2017 년 6 월 2 일 금요일

Android Studio 3.0 Canary 3을 Canary 및 Dev 채널에 출시했습니다. Android Gradle 플러그인 3.0.0-alpha3도 maven.google.com을 통해 출시되었습니다. 이 릴리스에는 Gradle , Kotlin 및 기타 여러 수정 사항이 수정되었습니다. 기능 안정화를 위해 Studio 3.0의 모든 영역에서 버그를 계속 수정하고 있으므로 계속해서 피드백을 전달해주세요.

작동하는 gradle 구성 :

build.gradle (프로젝트)

buildscript {
    ext.kotlin_version = '1.1.2-4'
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

build.gradle (모듈)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'


android {
    dataBinding.enabled = true
}
dependencies {
    kapt "com.android.databinding:compiler:3.0.0-alpha3"
}

Android Studio 2.3.2에서이 문제를 해결하는 방법은 무엇입니까?
Arsenius 2017-06-06

증분 거짓으로 이전 버전의 Kotlin 플러그인을 사용할 수 있습니다. "단축키"에 의해 이전의 답을 확인
Prokash 사카에게

1
아니요, 1.1.2-4여전히 작동하지 않습니다. 하나는 여전히 1.1.2-2kapt "com.android.databinding : compiler : 3.0.0-alpha3"을 사용하고 build.gradle (모듈)에 추가해야합니다. 그렇지 않으면 Unresolved reference : databinding이 표시됩니다.
0leg

1.1.2-5에서도 수정되지 않음
Daivid

2

여기 Kotlin을 사용하여 데이터 바인딩 Android 블로그를 작성 했습니다.

Classpath 사용

classpath 'com.android.tools.build:gradle:3.0.0-beta2'

의존

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    ...
    dataBinding {
        enabled = true
    }
}

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

자세한 내용은이 게시물을 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.