用于代码生成的 ANTLR 工具版本 4.5.3 与当前运行时版本 4.7.1 不匹配

Cas*_*erg 56 data-binding android kotlin antlr4 android-studio

我在 DataBindingMapperImpl.java 中收到一个特定数据绑定的错误,这导致在构建项目时出现以下错误。

用于代码生成的 ANTLR 工具版本 4.5.3 与当前运行时版本 4.7.1 不匹配。
用于解析器编译的 ANTLR 运行时版本 4.5.3 与当前运行时版本 4.7.1 不匹配

用于代码生成的 ANTLR 工具版本 4.5.3 与当前运行时版本 4.7.1
不匹配 用于解析器编译的 ANTLR 运行时版本 4.5.3 与当前运行时版本 4.7.1
/Users/casper/Documents/ARCore/Name /app/build/generated/source/kapt/nameDebug/com/company/name/DataBinderMapperImpl.java:10: 错误:找不到符号

import com.company.name.databinding.ActivitySplashScreenBindingImpl;

                                                ^

symbol:   class ActivitySplashScreenBindingImpl

> Task :app:kaptNameDebugKotlin FAILED
> Task :app:mergeExtDexNameDebug
location: package com.company.name.databinding
FAILURE: Build failed with an exception.
Run Code Online (Sandbox Code Playgroud)

然后是下面的错误消息...

我遵循了导致此问题的类似帖子here,这是上述错误消息的结尾。

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptNameDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
Run Code Online (Sandbox Code Playgroud)

我也试过

  1. 清理项目,然后重建项目
  2. 文件 -> 使缓存无效/重新启动
  3. 打开和关闭 Android Studio

连接到数据绑定的布局文件如下所示

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
    <variable
        name="viewmodel"
        type="com.company.name.ui.splashScreen.viewModel.SplashScreenViewModel"/>
    <variable
        name="tryAgainBtnHandler"
        type="com.company.name.ui.splashScreen.viewModel.interfaces.TryAgainBtnHandler"/>
</data>

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.splashScreen.view.SplashScreenActivity">
Run Code Online (Sandbox Code Playgroud)

解决方案

该错误是由错误引起的。我确实设置了可见性

android:visibility="@{viewmodel.errorContainerVisible ? View.VISIBLE : View.GONE}"
Run Code Online (Sandbox Code Playgroud)

忘记导入了

<data>
    <import type="android.view.View"/>
Run Code Online (Sandbox Code Playgroud)

Mat*_*Pag 63

免责声明:

下面的修复旨在解决具有某些依赖项冲突的特定问题,大多数数据绑定问题都可能导致此错误,但这只是错误的 XML 或代码的结果,在这种情况下,下面的解决方案将不起作用。在尝试以下解决方案之前,请仔细检查您的 XML/代码正确性。

这是一些数据绑定版本(嵌入在Android Studio 中)和其他依赖项(例如Room导入不同版本的org.antlr:antlr4库)的已知问题。

更新:12/06/2020(日/月/年)

如果您使用 Room,更新到Room 2.3.0-alpha01或更高版本应该会消除错误,因为他们已在此处解决了问题:https : //issuetracker.google.com/issues/150106190


将此配置放入应用程序中 build.gradle

//groovy
configurations.all {
    resolutionStrategy.force "org.antlr:antlr4-runtime:4.7.1"
    resolutionStrategy.force "org.antlr:antlr4-tool:4.7.1"
}

//kotlin DSL
configurations.all {
    resolutionStrategy {
        force("org.antlr:antlr4-runtime:4.7.1")
        force("org.antlr:antlr4-tool:4.7.1")
    }
}
Run Code Online (Sandbox Code Playgroud)

如果还是有问题,可以尝试使用4.5.3上面的版本,而不是4.7.1降级库

参考

  • 感谢 MatPag 的重播,但不幸的是,这两个选项都不起作用。 (2认同)
  • 真的很奇怪:/仔细检查你的 XML 文件,你可能在某个地方有一些错误阻止了 Binding 类的生成。开始尝试从 XML 中删除绑定元素(还有数据中的元素) (2认同)
  • @GuilhE 更新了答案,添加了 Kotlin DSL 版本 (2认同)
  • 非常感谢您的回答。我用解决方案更新了我的问题。 (2认同)

Dav*_*edy 6

在我的项目中,此错误是由我的 Room DAO 之一中的错误查询引起的。修复查询消除了错误。

不幸的是,错误消息没有明确指出错误的来源。