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

时间:2017-05-17 22:05:08

标签: android android-studio kotlin android-databinding android-studio-3.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"

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

谢谢!

5 个答案:

答案 0 :(得分:78)

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

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并禁用增量编译:

在项目的根目录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及以下版本的known issue与最新的AGP版本崩溃,禁用增量编译似乎可以解决这一崩溃问题。

答案 1 :(得分:17)

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

2017年6月2日星期五

  

我们刚刚向Canary发布了Android Studio 3.0 Canary 3   开发频道。 Android Gradle Plugin 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"
}

答案 2 :(得分:16)

在模块级别的app .gradle中,您似乎需要3个gradle条目来添加数据绑定

  1. apply plugin: 'kotlin-kapt'
  2. android { ... dataBinding { enabled = true } }
  3. dependencies { ...... kapt "com.android.databinding:compiler:$compiler_version" }
  4. 请注意,我在项目级构建gradle中将编译器版本变为一个变量,因此可以从一个地方进行管理

    默认为:ext.kotlin_version = '1.1.3-2'

    我添加了括号语法:

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

答案 3 :(得分:2)

我已经用Kotlin here

重新写了Blog for Data Binding 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'
}

有关详细信息,请查看此post

答案 4 :(得分:1)

如果您使用 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
    }
}