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

我刚开始使用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创建问题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及以下崩溃与最新的AGP版本,并禁用增量编译似乎修复了崩溃。

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

2017年6月2日星期五

我们刚刚发布了Android Studio 3.0 Canary 3到Canary和Dev Channels。 Android Gradle Plugin 3.0.0-alpha3也通过maven.google.com发布。 此版本修复了GradleKotlin和其他许多修补程序。 我们继续修复Studio 3.0所有领域的bug,因为我们稳定了我们的功能,所以请继续传递反馈意见。

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

看来你需要在模块级应用程序.gradle 3个gradle条目添加数据绑定

  1. apply plugin: 'kotlin-kapt'
  2. android { ... dataBinding { enabled = true } }
  3. dependencies { ...... kapt "com.android.databinding:compiler:$compiler_version" }

请注意,我在编译阶段将编译器版本变成了一个变量,因此可以从一个地方进行管理

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

我添加了括号语法:

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

我最近在这里写了博客数据绑定安卓与Kotlin

使用类路径

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

更详细的检查这个职位