如何在 Android Studio 3.0.0 中使用数据绑定和 Kotlin

How to use Data Binding and Kotlin in Android Studio 3.0.0

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

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

谢谢!

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 for creating the issue KT-17936


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

在项目的根目录 build.gradle 中,更改 Kotlin Gradle 插件的版本:

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

local.properties添加到项目根目录,使用以下行:

kotlin.incremental=false

这是一个 known issue,Kotlin Gradle 插件 1.1.2-2 及以下版本与最新的 AGP 版本崩溃,禁用增量编译似乎可以修复该崩溃.

对于那些仍在寻找合适解决方案的人,Google 已经在 Android Studio 3.0 Canary 3 版本中解决了这个问题。

2017 年 6 月 2 日,星期五

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.

工作 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"
}

您似乎需要在应用程序中添加 3 个 gradle 条目。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'
}

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

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

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

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

android {
    ...
    buildFeatures {
        dataBinding true
    }
}