【问题标题】:Android Studio fails to generate databinding after 3.1.0 updateAndroid Studio 3.1.0 更新后无法生成数据绑定
【发布时间】:2018-09-05 22:58:17
【问题描述】:

今天早上我将 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:忘了说,我尝试清理/重建/无效缓存并重新启动/删除构建文件夹。

【问题讨论】:

  • 您是否进行了清理/重建?
  • 已尝试清理/重建/使缓存无效并重新启动/删除构建文件夹。

标签: android android-studio android-studio-3.1


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    注意:Android Studio 尚不处理导入,因此导入变量的自动完成功能可能无法在您的 IDE 中工作。您的应用仍然可以编译,您可以通过在变量定义中使用完全限定名称来解决 IDE 问题。

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

    【讨论】:

      【解决方案3】:

      只需在 graddle-wrapper.properties 文件中注释这些行就可以帮助我解决问题

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

      【讨论】:

        【解决方案4】:
        • 在 gradle.properties 添加:
          android.databinding.enableV2=true

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

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

        它将开始工作......

        【讨论】:

          【解决方案5】:

          首先
          1. 在根布局中添加“布局”

          1. Build -> Make Project(用于添加“布局”后创建生成类)
          2. //绑定 私有lateinit var绑定:ActivityLoginBinding
          3. 在 oncreate 视图中 //setContentView(R.layout.activity_login) binding = DataBindingUtil.setContentView(this@LoginActivity,R.layout.activity_login)

          【讨论】:

            【解决方案6】:

            在 Room Entity 类中进行一些修改后出现此错误。所以我觉得这个错误与 Room 库有某种关系。尝试还原 Room 类和实体中的更改或评论它们以查看错误是否已修复。

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

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

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

            【讨论】:

              【解决方案7】:

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

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

              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
              

              【讨论】:

              • 我的房间数据库类中有错误的字段。这导致编译时数据绑定错误。在我将 `android.databinding.enableV2=false` 行添加到gradle.properties 之后,然后能够找出房间模型类错误。纠正问题后,我已删除此行。我正在使用上面答案中提到的 Android Studio 版本。
              • androidx.databinding:databinding-compiler的目的是什么?
              【解决方案8】:

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

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

              修复后数据绑定错误已修复。

              我猜这是 android studio 的错误。

              【讨论】:

              • 我也犯了这个错误,但添加 @Dao 并没有为我做。
              【解决方案9】:

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

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

              在此之后,我同步、重建并正确运行everyting

              【讨论】:

              • 你的android studio版本和gradle版本是什么?
              • 我正在使用带有 gradle 版本 4.10 的 Android Studio 3.3 Canary 11,但我发现问题是由于 AndroidManifest 中的包名称错误,因为绑定类在错误的位置生成并且不能不能在我想要的地方引用
              • 不完全相同的情况,但这个解决方案帮助我将我的思维过程导向正确的解决方案。将 gradle 插件从 3.2.0 更新到 3.6.1 后。并且还更新了对应的distributionUrl。它帮助我摆脱“DataBindingComponent not found 错误”。真正的错误被揭露了。
              【解决方案10】:

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

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

              原因:

              数据绑定 V2

              Data Binding V2 现在默认启用并与 V1 兼容。这意味着,如果您有使用 V1 编译的库依赖项,则可以将它们与使用 Data Binding V2 的项目一起使用。但是请注意,使用 V1 的项目不能使用使用 V2 编译的依赖项。

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

              【讨论】:

              • 这对我有帮助。可能我从数据绑定开始我的项目,后来又添加了 Room 数据库。但是由于依赖项是用 V1 编译的 - 有没有办法重新编译它们?
              • 删除 androidExtensions { Experimental = true } 时出现此错误
              • 这在以下情况下对我有用:我正在开发一个依赖于另一个组的 AAR 的 AAR,对此我没有发言权或影响力。我的 AAR 使用 V2,而他们使用 V1。直到看到你的回答,我才意识到这一点。它使用那个开关工作。
              • android.databinding.enableV2=false 已折旧,不再需要。
              【解决方案11】:

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

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

              问题实际上在于我对 Room 模型进行了无效更改。我猜可能所有数据绑定错误都混淆了 Room 错误,但终端中的 Debug/Scan 日志并没有指向它。

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

              编辑:请参阅SO post,了解这些混淆其他 kapt 问题(如 Room / Dagger)的数据绑定错误

              【讨论】:

              • 我遇到了同样的问题,无论我对房间相关的组件进行了无效的更改,它都会给我数据绑定错误,所以我想报告它,你是否已经将这个问题报告给issuetracker.google.com/issues ?
              • 这是我在 Room 上最糟糕的体验,我浪费了 2 天时间来确定为什么显示这么多绑定错误。运气不好
              【解决方案12】:

              如果您在 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
              

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

              【讨论】:

              • 我在更新到 Android Studio 3.2 时遇到了同样的问题,这对我有用,非常感谢
              • 为什么我们需要kapt 'com.android.databinding:compiler?好像没用
              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

                这是 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"
                }
                

                加上几个更干净/重建无效缓存并重新启动,它最终编译。 AS 工程师擅长制造错误!

                【讨论】:

                  【解决方案15】:

                  我遇到了同样的问题。通过将 google() 添加到 Project build.gradle 来修复它

                  allprojects {
                      repositories {
                          jcenter()
                          **google()**
                      }
                  }
                  

                  确保添加所有项目

                  【讨论】:

                    【解决方案16】:

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

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

                    【讨论】:

                      【解决方案17】:

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

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

                      【讨论】:

                      • 这没有意义
                      • 没说有任何意义...可能只是一个错误。
                      • 实际上它也适用于我在不同模块中的课程。我一起遇到了不同的问题。
                      • @MarianPavel 这是否意味着您刚刚停止使用数据绑定?
                      • @user650881 不,在一些项目中仍在使用它
                      【解决方案18】:

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

                      【讨论】:

                      • 我想使用数据绑定。很确定禁用数据绑定并不能帮助我实现这一目标。
                      【解决方案19】:

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

                      等待 Google 的修复

                      【讨论】:

                      • 请链接到问题跟踪器。
                      【解决方案20】:

                      从 Android Studio 3.0.1 更新到 3.1.0 时,您需要更改三项内容。如下所示

                      1) 你需要在distributionUrl中更改gradle.wrapper-properties。您的网址必须是 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) 第三也是最后一件事是需要将 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.30" 中的 kotlin gradle 插件更新为 classpath "org. jetbrains.kotlin:kotlin-gradle-plugin:1.2.31" 在项目级别的 gradle 依赖中。您还可以更新构建 gradle 版本,如下图所示。

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

                      谢谢!! 编码愉快!

                      【讨论】:

                      • 您找到解决方案了吗?也尝试过这种方法但没有用我的错误是找不到符号:DataBinderMapper
                      • 仍在寻找解决方案,抱歉。如果我得到什么,我会在这里发布答案
                      • 是的,我有这个解决方案,这对我有用。我也在为你寻找其他解决方案,如果我能得到然后分享将与你分享。
                      • 你的意思是现在它在 kotlin 上工作得很好,对吧?恭喜。愉快地使用 kotlin 进行编码。
                      • 绝对帮助解决了我将 java/kotlin 项目切换到 gradle 3.1.0 的数据绑定问题。谢谢!
                      猜你喜欢
                      • 1970-01-01
                      • 2022-12-17
                      • 2017-06-19
                      • 2020-06-10
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-04-09
                      • 2023-03-05
                      • 2020-06-09
                      相关资源
                      最近更新 更多