错误:在合并两个分支后找不到符号类DataBindingComponent

4
我遇到了一个非常奇怪的问题,我有两个分支并且它们单独工作正常。合并后,我们仔细解决了所有冲突。但是每次运行项目时,会出现以下三个错误,没有堆栈跟踪:
  1. 错误: 找不到符号 DataBindingComponent 类

  2. 错误: 找不到符号 DaggerLoginComponent 类

  3. Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.

有些东西阻止了注解处理器停止编译,但我们没有找到任何原因。我们已经手动检查了所有文件,但不知道如何调试此问题并找到其根本原因。请问是否有人知道如何跟踪为什么注解处理器未生成类。 我们尝试过以下方法:
  1. Clean -> Rebuild -> Invalidate Restart -> 删除所有临时文件。

  2. 使用此命令运行构建 ./gradlew clean assemble --stacktrace --debug

  3. 手动检查每个资源和Java文件以查找问题。

我们使用以下库:
  1. lombok 1.16.20,databinding,dagger 2.16,这些都使用注解处理器
我们在dimen、string和style文件中存在冲突,这些都被仔细解决了。
如果需要更多信息,请告诉我。
更新: 最终找到了一个解决方案,其他类中有一个私有静态导入引起了此问题。确保您没有任何Java编译器问题,即使是小的语法问题也会影响绑定,并且我不知道为什么错误没有打印在logcat中。希望在更新的Android Studio中得到解决。

由于合并,我认为数据绑定中可能会丢失或更改一些数据。请交叉检查完整的错误列表。 - Hemant Parmar
是的,检查了每一行代码,但没有找到特定的错误。 - Nitin Jain
你检查过这个链接吗:https://dev59.com/YVsV5IYBdhLWcg3wsgyh#43501906 - InsaneCat
是的,但没有帮助! - Nitin Jain
3个回答

2

总结一下,每当这种情况发生时,都与 Dagger 有关。

  • 在 Dagger 模块类中存在未解决的导入问题。花了 4 小时才找到问题所在。
  • 在一个抽象类上使用了 @Inject 注释。花了 2 天才找到问题所在。

发现 W*F 错误的工作流程如下:

  • 在小项目中检查所有的类和布局可能是一个可行的选择。
  • 如果可以的话,请返回提交以达到上一个工作点,并从那里开始查看。这几乎是无用的建议,因为这种讨厌的事情通常发生在某种重构的中间阶段。
  • 创建一个破坏性分支并尽可能使用 旧的数据绑定编译器android.databinding.enableV2=false。这样做可能需要您删除模块、删除您正在使用的新功能(例如非特征模块中的实验性数据绑定),可能降级 AGP。但这是值得的,因为旧的数据绑定编译器实际上会告诉您错误,而不是这个 cannot find symbol 的混乱。

祝你好运,在这个繁琐的过程中,如果可以,请向数据绑定团队提交错误报告。


2

这是我在上个月面临过的最奇怪的问题。首先,数据绑定(Data Binding) 不够成熟,无法在错误日志中显示所有错误。

然而,有些问题无法被lint检测到,并导致与绑定相关的所有类中出现错误。

原因:

  • 当布局组件绑定中存在一个在你的模型类中不存在的字段时;
  • 当你的数据绑定布局中包含一些无效的导入时。

解决方法:

  1. 首先检查你的布局是否存在无效的导入。因为这将不会错误日志中显示。
  2. 如果你没有发现任何问题,那么仔细检查你所有的布局,看看是否缺少模型字段。如果布局中使用了某个在模型类中不存在的字段,则不会得到适当的错误提示。
  3. 如果以上方法都无效,请检查你的绑定组件名称是否正确。因为如果你的合作伙伴改名了一个布局,那么你应该在Activity或Fragment中相应地更改它的相关LayoutBinding名称。

这些解决方案总是能够帮助我克服这个问题。


0

将 XML 文件重命名为另一个名称,并检查绑定是否正常工作。一旦它正常工作,请将其重新命名为原来使用的名称。 希望这可以帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接