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


99

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

而且工作正常……我做错了什么?

谢谢!


1
好像是一个错误,引起了一个问题:youtrack.jetbrains.com/issue/KT-17936
Vyacheslav Gerasimov

即使没有任何数据绑定,也会出现此错误。您只使用1.1.2-4版本的kotlin并应用插件:“ kotlin-kapt”。然后,您将得到此错误错误:以下任务之间的循环依赖性::app:compileDebugKotlin \ ---:app:kaptDebugKotlin \ ---:app:compileDebugKotlin()()-省略了详细信息(先前列出)
Arsenius

Answers:


20

似乎您需要在模块级别的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'
}

1
添加kotlin-kapt和该依赖项行是正确的答案。顶端回答是不相关的任何更多
SpaceMonkey

喜欢使用版本变量
Shirane85 '17

我得到:-具有所有版本[kapt]发生异常:java.lang.NullPointerException
Pavel Zaitsev

@PavelZaitsev我已经有一段时间没有使用android studio了
橡皮鸭

78

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

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

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

添加local.properties到项目根目录,并包含以下行:

kotlin.incremental=false

这是一个已知的问题是,科特林摇篮插件1.1.2-2及以下有最新版本的AGP崩溃,并禁用增量编译似乎修复崩溃。


我相信您的意思是gradle.properties
Leandro Borges Ferreira

1
@LeandroBorgesFerreira,您可以使用任何一个,因为Gradle也会检测并解释local.properties项目中的文件。好吧,也许local.properties更适合本地机器属性。
热键


6
实际上恢复到1.1.2-3也可以。采用Android 2.3.2工作室的gradle和2.3.2相同的问题时,使用带科特林-kapt插件科特林1.1.2-4在一起
Arsenius

1
基于issuetracker.google.com/issues/38447344的@hotkey,这是Android插件中的问题,而不是kotlin gradle插件中的问题。已进行修复,并计划在下一个3.0.0 alpha版本中发布。
Nimrod Dayan

17

对于仍在寻找适当解决方案的用户,Google已经在Android Studio 3.0 Canary 3版本中解决了此问题。

2017年6月2日,星期五

我们刚刚向Canary和Dev Channels发布了Android Studio 3.0 Canary 3。Android Gradle插件3.0.0-alpha3也通过maven.google.com发布。此版本已修复了GradleKotlin和许多其他修复程序。我们会在稳定功能的同时继续修复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"
}

如何在Android Studio 2.3.2中解决此问题?
Arsenius

您可以使用带有增量false的较旧版本的Kotlin插件。通过“热键”检查先前的答案
Prokash Sarkar

1
不,1.1.2-4仍然无效。仍然需要使用一个,1.1.2-2并且还要在您的build.gradle(模块)中添加kapt“ com.android.databinding:compiler:3.0.0-alpha3”,否则您将获得Unresolved reference:databinding。
0leg

也不固定在1.1.2-5上
Daivid

2

我最近在这里用Kotlin编写了数据绑定android博客

使用类路径

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

有关更多详细信息,请查看此帖子

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.