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

时间:2018-03-27 13:39:58

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

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

20 个答案:

答案 0 :(得分:13)

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

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

原因:

  

数据绑定V2

     

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

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

答案 1 :(得分:4)

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

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

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

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

编辑:有关混淆其他kapt问题(例如Room / Dagger)的这些数据绑定错误,请参见此SO post

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

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

1)您需要更改distributionUrl中的 gradle.wrapper-properties 。您的网址必须为 distributionUrl = https://services.gradle.org/distributions/gradle-4.4-all.zip

enter image description hereenter image description here

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

enter image description here

如果你使用kotlin开发,那么,

3)第三件也是最后一件事需要更新kotlin gradle插件 classpath“org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.30” classpath“org。 jetbrains.kotlin:kotlin-gradle-plugin:1.2.31“在项目级别的gradle依赖性。您还可以更新build gradle版本,如下图所示。

enter image description here

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

谢谢! 快乐的编码!!

答案 4 :(得分:3)

只需在Vec<&str>文件中注释这些行就可以帮助我解决问题

graddle-wrapper.properties

答案 5 :(得分:3)

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

我必须在项目根包中移动我在数据绑定中使用的所有类,然后再开始工作。

答案 6 :(得分:2)

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

等待Google修复

答案 7 :(得分:1)

这些解决方案中没有一个对我有用,因此我在android studio 3.2 beta 4版本中发现了它的错误:

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! sampleTableViewCell

    cell.sample.text = "sample"
    cell.sample.delegate = self

    return cell
}

在我同步之后,重建并正确运行所有内容

答案 8 :(得分:1)

在grade.properties中添加这些行有助于我保存问题

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

答案 9 :(得分:1)

与@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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

这是Android Studio和数据绑定中的一个非常棘手的错误!我必须整天测试所有这些提议的解决方案以及其他一些解决方案,以最终至少使数据绑定编译。

所以我不得不禁用gradle.properties文件中的所有databindind设置,只需注释以下行或将其删除:

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

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

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

再加上几个清理/重建会使高速缓存失效并重新启动,并最终进行编译。 AS工程师非常擅长创建bug!

答案 12 :(得分:0)

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

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

确保添加allProjects

答案 13 :(得分:0)

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

我声明了Dao接口之一,但忘了用@Dao对其进行注释。

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

我猜这是android studio的错误。

答案 14 :(得分:0)

全部优先
1.在您的根目录布局中添加“布局”

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

答案 15 :(得分:0)

  • 在gradle.properties中添加:
    android.databinding.enableV2=true

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

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

它将开始工作...

答案 16 :(得分:0)

我在将gradle更新到3.4.2时得到了这个。您需要做的就是删除java.lang的import语句。以下是Google文档的简短屏幕

enter image description here

答案 17 :(得分:0)

只需连接到Internet并使用gradle文件同步项目。会的。

答案 18 :(得分:-1)

在房间实体类中进行了一些修改后,我得到了这个错误。所以我觉得这个错误与Room库有关。尝试还原Room类和实体中的更改,或为它们添加注释以查看错误是否已解决。

在我的情况下,由于我是从插入和更新方法返回int而出现错误。这些方法不应返回任何内容。因此,删除return可以修复错误。

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

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

答案 19 :(得分:-7)

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