Android 数据绑定:包不存在

Android Databinding : package does not exist

我正在尝试使用 Android 的数据绑定。

我无法再构建我的项目。我收到此错误:

"Error:(13, 46) error: package ch.company.project.databinding does not exist"

这是我的 gradle :

http://pastebin.com/dkXd1Mxr

http://pastebin.com/n9hkFWGQ

这里是 gradle 输出:

https://pastebin.com/w93Rausg

感谢 Yigit!

问题不是直接link到Android数据绑定。 项目中有错误(一些变量设置不正确)

我建议将 gradle 与 "--debug 和 --stacktrace" 一起使用以获得更多信息,这很有帮助。

错误不是数据绑定包,而是语法或逻辑错误。例如,您的 POJO 中有属性 "lastName",但在布局中它是 android:text="@{user.lastname}"

检查您的 "layout" 并执行重建项目。

我收到错误:

Error:(9, 46) error: package com.company.www.bar.databinding does not exist.

我只是删除了“=”符号。它对我有用

来自这里:

 <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@={()->activity.onButtonClick()}"/>

至:

<Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{()->activity.onButtonClick()}"/>

我的项目遇到了类似的问题

你可以试试:

  • 检查 xml 文件是否存在导致构建失败的错误
  • 清理项目
  • 文件 -- 使缓存无效/重新启动

确保您在布局中引用的模型字段具有 public 访问修饰符

在我的特殊情况下,我使用的是 Dagger 2。这个包错误出现在很多 类 中,与原始错误没有任何关系:依赖注入错误。

温馨提醒:在堆栈跟踪上滚动更多内容以了解真正的问题所在。

要消除此错误,只需将完整的布局设计包含在 activity_main.xml 文件中的普通布局标记中即可。

在浪费了很多时间寻找解决方案后,这对我有用。试一试。

我被同样的错误困扰了几个小时。在尝试了 Whosebug 的几种解决方案之后,我用稳定的 gradle 依赖项更新了我的项目。

仍然没有解决,但是同样的 gradle 依赖 DataBinding 在我的另一个项目中工作正常。

所以,我使用资源管理器进入项目文件夹并删除 2 件事。

  1. build folder
  2. all files from .idea/libraries

在那之后我同步了项目并且它继续工作得很好。

我对接受的答案不满意,它告诉你堆栈跟踪没有提示。

以下是导致此问题的一些可能原因。请检查您是否没有执行以下任何操作。

基本上Android DataBinding不是成熟。它会多次失败而没有适当的错误

因此,如果您遇到类似 package ch.company.project.databinding does not exist" 的问题。

失败的可能原因:

  • 首先检查你的最近编辑的布局xml一一错误(错误imports & variables)。在这种情况下,我通常不会得到正确的错误。

  • 检查你的数据绑定语法 in binding block ({...}) in layout 错误元素。 在一个布局中工作后总是重建(不是构建)项目。

  • 检查您的 @BindingAdapter 方法是否具有正确的参数。例如 imageUrl 绑定适配器将接受 ImageViewView 作为第一个参数。

  • 你应该总是重新构建项目完成工作后在一个布局.

  • 如果你通过上面的步骤都找不到错误,那就在

    的编译选项中尝试--debug and --stacktrace

    File> Settings> Build, Execution, Deployment> Compiler> Command-line Options

确保您的包名称以小写字母开头。 在我的案例中,经过两个小时的努力,问题得到解决

早些时候我的包裹名称是"com.xyz.abc.Models" 将包名称更改为 所有小写字母 "Models" -> "models"

解决了问题。

包名应以小写字母开头。 例如 Activities 是错误的它会给出一个错误而不是 refactor->rename to activities

如果您尝试过此步骤

  1. invalidate/restart`
  2. 在 gradel.properties
  3. 中保留此属性
android.databinding.enableV2=false
android.enableExperimentalFeatureDatabinding=true

并检查所有 xml 文件看起来不错。 那么你应该使用这个解决方案,在项目级别添加以下代码 build.gradle

    allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xmaxerrs" << "1000"
        }
    }
}

这会在你有实际错误的地方给你确切的错误 解释:上面的代码会增加编译错误的大小

改变

{ databinding = true}

buildFeatures{
     dataBinding = true
    
}

包名称必须 START 使用 小写字母 。否则,Binding library无法理解是class还是package.此外,您不需要全部使用小写字母。

示例,错误的用法:

package com.thecompany.activity.ContactInfo; //Problem is ContactInfo, 'C'.

示例,TRUE 用法:

package com.thecompany.activity.contactInfo; //Solution is contactInfo, 'c'.

就我而言,我遵循 android 文档:

buildFeatures {
    viewBinding true
}

使用“=”代替 space

buildFeatures {
    viewBinding = true
}

尝试关注 Refactor -> migrate to androidx

并在 build.grade(:app)

implementation 'androidx.appcompat:appcompat:1.0.0'

或使用新版本发布

implementation 'androidx.databinding:databinding-runtime:4.1.0'

如果您因为在 Android Studio Artic Fox 中切换到 JDK11 而出现此问题,并且您的视图绑定在 UI 中中断但不是在执行期间中断,请注意这是一个已知问题,应在 Bumble Bee 中解决:

https://issuetracker.google.com/issues/180946610

当前的修复是切换回 JDK8(或安装 Bumble Bee 金丝雀版本)。

确保如果您的布局文件名采用以下格式命名:<name>_activity.xml 您的绑定 class 名称也符合以下格式:<name>ActivityBinding

对我来说,将我的布局文件名从 activity_login.xml 更改为 login_activity.xml 解决了这个问题,因为我的绑定 class 名称是 LoginActivityBinding

这是 Android Layouts and binding expressions page 中提到的例外情况:

A binding class is generated for each layout file. By default, the name of the class is based on the name of the layout file, converting it to Pascal case and adding the Binding suffix to it. The above layout filename is activity_main.xml so the corresponding generated class is ActivityMainBinding