Android Studio 在 3.1.0 更新后无法生成数据绑定

Android Studio fails to generate databinding after 3.1.0 update

今天早上,我将 android studio 从 3.0.1 更新到 3.1.0。将 gradle 更新到最新版本后,我仍然遇到有关数据绑定的构建错误。

我的gradle-wrapper.properties:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

我所有的错误如下:

/Users/mp/Documents/GitHub/projectx/app/build/generated/source/dataBinding/baseClasses/Staging/debug/me/projectx/asdasd/databinding/GridItemActivityTypeBinding.java:57: error: cannot find symbol
      @Nullable DataBindingComponent component) {
                ^
  symbol:   class DataBindingComponent
  location: class GridItemActivityTypeBinding

有谁知道为什么我的数据绑定在 android studio 3.1 更新后无法生成?提前致谢

编辑 1:忘了说,我试过 clean/rebuild/invalidate 缓存和 restart/deleted 构建文件夹。

当您从 Android Studio 3.0.1 更新到 3.1.0 时,您需要更改三件事。如下所示

1) distributionUrl 中的gradle.wrapper-properties需要修改。您的 URL 必须是 distributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip

2) 需要将应用级别 gradle 文件中的数据绑定依赖项从 kapt 'com.android.databinding:compiler:3.0.1' 更新为 kapt 'com.android.databinding:compiler:3.1.0'

如果您正在使用 kotlin 进行开发,

3) 第三也是最后一件事是需要将 kotlin gradle plug in classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.30" 更新为 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.31" 在项目级别 gradle 依赖。您还可以更新构建 gradle 版本,如下图所示。

完成上述所有步骤后,只需清理构建和重建项目即可。希望它能解决你的问题。

谢谢!! 编码愉快!!

要修复 Java 项目中的这个错误,您应该从 27.1.0 回滚到 supportLibraryVersion - 27.0.2 适用于 AndroidStudio 3.1 和 com.android.tools.build:gradle:3.1.0

等待 Google

的修复

我遇到了同样的问题。我在 gradle 属性中禁用了数据绑定并且它起作用了。 dataBinding.enabled = false

好的,那些想知道我是如何解决这个问题的人。 解决方案非常简单,但您可能不会喜欢它。

我不得不将所有用于数据绑定的 类 移动到项目根包中,然后它再次开始工作。

在 grade.properties 中添加这些行帮助我解决了这个问题

android.enableExperimentalFeatureDatabinding = true
android.databinding.enableV2=true

我遇到了同样的问题。通过将 google() 添加到项目 build.gradle

来修复它
allprojects {
    repositories {
        jcenter()
        **google()**
    }
}

确保添加所有项目

这是 android studio 和数据绑定的一个非常棘手的错误!我不得不测试所有这些提议的解决方案以及更多的解决方案一整天,以最终至少使数据绑定编译。

所以我不得不禁用 gradle.properties 文件中的所有数据绑定设置,只需注释这些行或删除它们:

android.databinding.enableV2 = true
android.enableExperimentalFeatureDatabinding = true

build.gradle 中删除 buildToolsVersion 并具有以下 sdk 版本:

compileSdkVersion 27
defaultConfig {
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

再加上几个 clean/rebuild 使缓存无效并重新启动,它最终编译成功。 AS 工程师很擅长制造 bug!

这些解决方案都不适合我,所以我在 android studio 的 3.2 beta 4 版本中发现了它的错误:

buildscript {

repositories {
...
}
dependencies {
    //classpath "com.android.tools.build:gradle:3.2.0-beta04"  // buggy databinding
    classpath "com.android.tools.build:gradle:3.1.3" // working
}}

在此之后我同步、重建并运行一切正常

如果您正在使用数据绑定,请检查您的 xml 文件。 我今天浪费了一个小时,因为我重命名了一个 class 并且 Android Studio 决定对我的 xml 文件进行更改。 例如,我有一个名为 LiveGameModel 的 class,我重命名为 LiveGameView,AS 决定对与此视图无关的 xml 文件进行更改。我知道,这个错误没有意义。

如果您在 android studio 3.2 上使用 kotlin, 用这一行替换 distributionurl

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

并且系统会要求您将构建工具版本更改为适当的版本。 完成后,从应用级别 build.gradle 文件

中删除此行
kapt 'com.android.databinding:compiler:3.0.1

并构建项目。它对我有用。

这可能不是最有帮助的答案,但就我而言,这是由我的代码中完全不相关的问题引起的。

我收到了 51 个 error: cannot find symbol: DataBindingComponent 错误(在生成的每个数据绑定中 class),我花了很长时间删除对 XML 和 ViewModel 代码的更改,试图找到错误的原因导致它。

问题实际上出在我做了一个房间模型的无效更改。我猜 Room 错误可能已被所有数据绑定错误混淆,但终端中的 Debug/Scan 日志并未指向它。

因此,如果遇到此问题,请检查所有最近的代码,即使是看似无关的更改。

编辑:看到这个关于这些混淆其他 kapt 问题(如 Room / Dagger)的数据绑定错误

更新到 Android Studio 3.2 后,这条线对我有用。我的项目中有 Java 和 Kotlin 代码(编译器)运行。

将以下内容添加到您的gradle.properties: android.databinding.enableV2=false

原因:

Data Binding V2

Data Binding V2 is now enabled by default and is compatible with V1. This means that, if you have library dependencies that you compiled with V1, you can use them with projects using Data Binding V2. However, note that projects using V1 cannot consume dependencies that were compiled with V2.

来源(发行说明):https://developer.android.com/studio/releases/

这可能看起来很奇怪,但我浪费了几个小时来面对这个错误,在检查我最近的更改后,我发现它与 Room 数据库中的一个错误有关。

我声明了一个 Dao 接口,但忘了用 @Dao 注释它。

修复数据绑定错误后。

我猜这是 android 工作室的一个错误。

我遇到了与@Marian Pavel 相同的问题,我的项目无法编译数据绑定组件,除非我在根文件夹中有用于数据绑定的 class。

我通过这样做解决了这个问题:

Android Studio:3.2.1 稳定版

**project build.gradle**
classpath 'com.android.tools.build:gradle:3.2.1'

**module build.gradle**
apply plugin: 'kotlin-kapt'
kapt "androidx.databinding:databinding-compiler:3.2.1"

**gradle.properties**
android.databinding.enableV2=false

我在 Room Entity 类 中进行了一些修改后遇到了这个错误。所以我觉得这个错误在某种程度上与 Room 库有关。尝试还原 Room 类 和实体中的更改或对其进行评论以查看错误是否已修复。

在我的例子中,错误出现是因为我从插入和更新方法中 returning int。这些方法不应该 return 任何东西。所以删除 return 修复了错误。

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student):Int

@Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(student: Student)

首先
1. 添加 "layout" 到你的根布局

  1. Build -> Make Project(添加"layout"后创建生成class)
  2. //绑定 私人 lateinit var binding:ActivityLoginBinding
  3. 在创建视图中 //设置内容视图(R.layout.activity_login) 绑定 = DataBindingUtil.setContentView(this@LoginActivity,R.layout.activity_login)
  • 在gradle.properties中添加:
    android.databinding.enableV2=true

  • 在build.gradle(module:app)文件中添加:
    dataBinding {enabled = true}

  • 清理项目并重新构建它。

它将开始工作...

我在将 gradle 更新到 3.4.2 时得到了这个。您需要做的就是删除 java.lang.

的导入语句

Caution: Android Studio doesn't yet handle imports so the autocomplete for imported variables may not work in your IDE. Your app still compiles and you can work around the IDE issue by using fully qualified names in your variable definitions.

来源:https://developer.android.com/topic/libraries/data-binding/expressions#import-classes

只是在 graddle-wrapper.properties 文件中注释掉这些行帮助我解决了我的问题

#android.enableExperimentalFeatureDatabinding = true
#android.databinding.enableV2=true

只需连接到互联网并将项目与 gradle 个文件同步。会的。