107

我刚开始使用 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"

它工作得很好......我做错了什么?

谢谢!

4

5 回答 5

80

UPD:这是针对 Android Gradle 插件 3.0.0-alpha3 修复的,在您的项目根目录build.gradle中,更改buildscript dependencies为使用

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

这实际上是 Kotlin Gradle 插件 1.1.2-4 与 Android Gradle 插件 3.0.0-alpha1 互操作中的一个错误,由任务的输入和输出的设置方式(以及任务的连接方式)引起依赖关系)。

感谢@VyacheslavGerasimov创建问题KT-17936


作为临时解决方法,您可以尝试恢复到 Kotlin Gradle 插件 1.1.2-2 并禁用增量编译:

在项目的 rootbuild.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 版本中崩溃是一个已知问题,禁用增量编译似乎可以修复该崩溃。

于 2017-05-17T23:05:56.607 回答
36

似乎您需要在模块级别的 app .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'
}
于 2017-09-26T14:43:45.667 回答
17

对于那些仍在寻找合适解决方案的人,谷歌已经在Android Studio 3.0 Canary 3 build 中修复了这个问题。

2017 年 6 月 2 日,星期五

我们刚刚向 Canary 和 Dev 频道发布了 Android Studio 3.0 Canary 3。Android Gradle Plugin 3.0.0-alpha3 也通过 maven.google.com 发布。此版本修复了GradleKotlin和许多其他修复。随着我们稳定我们的功能,我们将继续修复 Studio 3.0 的所有区域中的错误,因此请继续传递反馈。

工作梯度配置:

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"
}
于 2017-06-03T14:50:47.550 回答
2

如果您使用 Kotlin Gradle 插件 1.3 及更高版本,则无需指定kapt "com.android.databinding:compiler:$plugin_version"

https://youtrack.jetbrains.com/issue/KT-32057

dataBinding在 build.gradle 文件中指定就足够了:

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

或者

android {
    ...
    buildFeatures {
        dataBinding true
    }
}
于 2021-05-25T08:41:46.447 回答
1

我遵循了这些步骤,它对我来说非常有效。 关于 Android 与 Kotlin 的数据绑定的中篇文章

于 2022-02-03T03:29:21.847 回答