How to use Data Binding and Kotlin in Android Studio 3.0.0
AndroidAndroid StudioKotlinAndroid DatabindingAndroid Studio-3.0Android Problem Overview
I just started to use Android Studio 3.0.0, but every time I try to build my project I get this error:
Error:Circular dependency between the following tasks:
:app:compileDebugKotlin
+--- :app:dataBindingExportBuildInfoDebug
| \--- :app:compileDebugKotlin (*)
\--- :app:kaptDebugKotlin
\--- :app:dataBindingExportBuildInfoDebug (*)
(*) - details omitted (listed previously)
I am using
kapt "com.android.databinding:compiler:2.2.0"
Before I was using
androidProcessor "com.android.databinding:compiler:2.2.0"
And it was working just fine... What I am doing wrong??
Thanks!
Android Solutions
Solution 1 - Android
UPD: This was fixed for Android Gradle plugin 3.0.0-alpha3, in yout project root build.gradle
, change the buildscript
dependencies
to use
classpath 'com.android.tools.build:gradle:3.0.0-alpha3'
This is actually a bug in the Kotlin Gradle plugin 1.1.2-4 inter-operation with the Android Gradle plugin 3.0.0-alpha1, caused by how the inputs and outputs of the tasks are set (and thus how the tasks are connected with the depends-on relation).
Thanks @VyacheslavGerasimov for creating the issue KT-17936.
As a temporary workaround, you can try to revert to Kotlin Gradle plugin 1.1.2-2 and disable incremental compilation:
In your project's root build.gradle
, change the version of the Kotlin Gradle plugin:
buildscript {
...
dependencies {
...
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-2'
}
}
Add local.properties
to the project root, with the following line:
kotlin.incremental=false
It is a known issue that the Kotlin Gradle plugin 1.1.2-2 and below crashes with the newest AGP versions, and disabling incremental compilation seems to fix that crash.
Solution 2 - Android
It seems that you need 3 gradle entries in the app .gradle at module level to add data binding
apply plugin: 'kotlin-kapt'
android { ... dataBinding { enabled = true } }
dependencies { ...... kapt "com.android.databinding:compiler:$compiler_version" }
Notice that I made compiler version a variable in the project level build gradle so it can be managed from a single place
default was: ext.kotlin_version = '1.1.3-2'
I added with bracket syntax:
ext{
kotlin_version = '1.1.3-2'
compiler_version = '3.0.0-beta6'
}
Solution 3 - Android
For those still looking for a proper solution, Google has already fixed this issue in Android Studio 3.0 Canary 3 build.
Friday, June 2, 2017
> We have just released Android Studio 3.0 Canary 3 to the Canary and > Dev Channels. The Android Gradle Plugin 3.0.0-alpha3 was also released > through maven.google.com. This release has fixes to Gradle, Kotlin, > and many other fixes. We continue to fix bugs in all areas of Studio > 3.0 as we stabilize our features, so please continue to pass on feedback.
Working gradle configuration:
build.gradle (project)
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 (module)
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"
}
Solution 4 - Android
If you use Kotlin Gradle plugin 1.3 and higher, you do not need to specify kapt "com.android.databinding:compiler:$plugin_version"
https://youtrack.jetbrains.com/issue/KT-32057
It is enough to specify dataBinding
in your build.gradle file:
android {
...
dataBinding {
enabled = true
}
}
or
android {
...
buildFeatures {
dataBinding true
}
}