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

Lea*_*ira 96 android kotlin android-studio 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)
Run Code Online (Sandbox Code Playgroud)

我在用

kapt "com.android.databinding:compiler:2.2.0"
Run Code Online (Sandbox Code Playgroud)

在我使用之前

androidProcessor "com.android.databinding:compiler:2.2.0"
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

hot*_*key 78

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

classpath 'com.android.tools.build:gradle:3.0.0-alpha3'
Run Code Online (Sandbox Code Playgroud)

这实际上是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'
    }
}
Run Code Online (Sandbox Code Playgroud)

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

kotlin.incremental=false
Run Code Online (Sandbox Code Playgroud)

Kotlin Gradle插件1.1.2-2及更低版本与最新的AGP版本崩溃是一个众所周知的问题,禁用增量编译似乎可以解决这个崩溃问题.

  • 实际上恢复到1.1.2-3也行得正常.使用Kotlin 1.1.2-4和kotlin-kapt插件时,Android Studio 2.3.2和gradle 2.3.2也存在同样的问题 (6认同)

Rub*_*uck 19

您似乎在模块级别的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'
}
Run Code Online (Sandbox Code Playgroud)


Pro*_*kar 17

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

2017年6月2日星期五

我们刚刚向Canary和Dev Channels发布了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"
    }
}
Run Code Online (Sandbox Code Playgroud)

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"
}
Run Code Online (Sandbox Code Playgroud)