108

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!

Muntasir
  • 798
  • 1
  • 14
  • 24
Leandro Borges Ferreira
  • 12,422
  • 10
  • 53
  • 73
  • 1
    Seems like a bug, created issue: https://youtrack.jetbrains.com/issue/KT-17936 – Vyacheslav Gerasimov May 17 '17 at 22:21
  • This bug appear even without any data binding. You just use 1.1.2-4 version of kotlin and apply plugin: 'kotlin-kapt'. Then you will get this error Error:Circular dependency between the following tasks: :app:compileDebugKotlin \--- :app:kaptDebugKotlin \--- :app:compileDebugKotlin (*) (*) - details omitted (listed previously) – Arsenius May 20 '17 at 09:34
  • Also related issue: https://issuetracker.google.com/issues/38471980 – BoD May 20 '17 at 14:09

4 Answers4

80

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.

hotkey
  • 140,743
  • 39
  • 371
  • 326
  • I believe you meant gradle.properties – Leandro Borges Ferreira May 18 '17 at 18:30
  • 1
    @LeandroBorgesFerreira, you use can any of them, because Gradle detects and interprets the `local.properties` file in your projects as well. Well, maybe `local.properties` is more suitable for *local machine* properties. – hotkey May 18 '17 at 21:14
  • 1
    This leads to this error: http://stackoverflow.com/questions/44056104/gradle-3-0-0-alpha1-isnt-compatible-with-kotlin-android-plugin-1-1-2-3 – gderaco May 19 '17 at 09:44
  • @gderaco, make sure you disable Kotlin incremental compilation. The error you mentioned is caused by the incompatibility of the incremental compilation code in 1.1.2 with the newer Android Gradle plugin. – hotkey May 19 '17 at 12:54
  • 6
    Actually to revert to 1.1.2-3 also works fine. Same issue with Android Studio 2.3.2 and gradle 2.3.2 when using Kotlin 1.1.2-4 together with kotlin-kapt plugin – Arsenius May 20 '17 at 09:37
  • 1
    @hotkey based on https://issuetracker.google.com/issues/38447344 this is an issue in the Android plugin, not kotlin gradle plugin. A fix was made and is planned to be released in the next 3.0.0 alpha release. – Nimrod Dayan May 24 '17 at 18:56
  • @Arsenius how you reverted? Did you switch to stable release of android studio? – DarkLeafyGreen Jun 01 '17 at 21:05
  • @LostinBielefeld just use classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" where kotlin_version 1.1.2-3 Yes I'm using stable release 2.3.2 – Arsenius Jun 06 '17 at 05:10
41

It seems that you need 3 gradle entries in the app .gradle at module level to add data binding

  1. apply plugin: 'kotlin-kapt'
  2. android { ... dataBinding { enabled = true } }
  3. 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'
}
Rubber Duck
  • 3,673
  • 3
  • 40
  • 59
18

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"
}
Prokash Sarkar
  • 11,723
  • 1
  • 37
  • 50
3

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
    }
}