【问题标题】:How to use Data Binding and Kotlin in Android Studio 3.0.0如何在 Android Studio 3.0.0 中使用数据绑定和 Kotlin
【发布时间】:2017-10-17 13:04:38
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 似乎是一个错误,已创建问题:youtrack.jetbrains.com/issue/KT-17936
  • 即使没有任何数据绑定也会出现此错误。您只需使用 1.1.2-4 版本的 kotlin 并应用插件:'kotlin-kapt'。然后你会得到这个错误 Error:Circular dependency between the following tasks: :app:compileDebugKotlin \--- :app:kaptDebugKotlin \--- :app:compileDebugKotlin () () - 省略细节 (之前列出的)

标签: android android-studio kotlin android-databinding android-studio-3.0


【解决方案1】:

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

known issue Kotlin Gradle 插件 1.1.2-2 及更低版本在最新的 AGP 版本中崩溃,禁用增量编译似乎可以解决该崩溃问题。

【讨论】:

  • 我相信你的意思是 gradle.properties
  • @LeandroBorgesFerreira,您可以使用其中的任何一个,因为 Gradle 也会检测并解释您项目中的 local.properties 文件。好吧,也许local.properties 更适合本地机器属性。
  • 这会导致这个错误:stackoverflow.com/questions/44056104/…
  • 实际上恢复到 1.1.2-3 也可以。将 Kotlin 1.1.2-4 与 kotlin-kapt 插件一起使用时,Android Studio 2.3.2 和 gradle 2.3.2 也存在同样的问题
  • @hotkey based on issuetracker.google.com/issues/38447344 这是 Android 插件中的问题,而不是 kotlin gradle 插件中的问题。已修复并计划在下一个 3.0.0 alpha 版本中发布。
【解决方案2】:

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

【讨论】:

  • 这是正确的答案,添加 kotlin-kapt 和依赖行。最佳答案不再相关
  • 喜欢使用版本变量
  • 我得到:-所有版本 [kapt] 发生异常:java.lang.NullPointerException
  • @PavelZaitsev 好久没用过android studio了
【解决方案3】:

对于仍在寻找合适解决方案的用户,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。此版本修复了 GradleKotlin、 和许多其他修复。我们将继续修复 Studio 各个区域的错误 3.0 我们稳定了我们的功能,所以请继续传递反馈。

工作梯度配置:

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 中解决这个问题?
  • 您可以使用带有增量 false 的旧版 Kotlin 插件。通过“热键”查看上一个答案
  • 不,1.1.2-4 仍然不起作用。仍然必须使用1.1.2-2 并将 kapt "com.android.databinding:compiler:3.0.0-alpha3" 添加到您的 build.gradle(模块)中,否则您将获得 Unresolved reference: databinding。
  • 1.1.2-5 也未修复
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    我遵循了这些步骤,它对我非常有效。 Medium article on Android’s Data Binding with Kotlin

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 2016-06-19
      • 2015-09-05
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多