用于代码生成的 ANTLR Tool 版本 4.5.3 与当前运行时版本 4.7.1 不匹配
Posted
技术标签:
【中文标题】用于代码生成的 ANTLR Tool 版本 4.5.3 与当前运行时版本 4.7.1 不匹配【英文标题】:ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1 【发布时间】:2020-07-06 22:46:42 【问题描述】:我在 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.
接着是下面的错误信息...
我关注了类似的帖子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)
我也试过
-
清理项目,然后重建项目
文件 -> 使缓存无效/重新启动
打开和关闭 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_
android:layout_
tools:context=".ui.splashScreen.view.SplashScreenActivity">
解决方案
错误是由错误引起的。我确实设置了可见性
android:visibility="@viewmodel.errorContainerVisible ? View.VISIBLE : View.GONE"
忘记导入
<data>
<import type="android.view.View"/>
【问题讨论】:
请将您的解决方案作为答案发布,以帮助人们解决此问题,因为这就是 SO 的工作方式。 【参考方案1】:免责声明:
以下修复旨在解决某些特定问题 依赖项冲突,主要是数据绑定问题可能导致此错误,但 仅是错误的 XML 或代码的结果,并且 在这种情况下,下面的解决方案将不起作用。在尝试以下解决方案之前,请仔细检查您的 XML/代码的正确性。
这是一些数据绑定版本(嵌入在Android Studio 中)和其他依赖项(如Room
)的已知问题,它们导入不同版本的org.antlr:antlr4
库。
更新:2020 年 12 月 6 日(日/月/年)
如果您使用 Room,更新到 Room 2.3.0-alpha01 或更高版本应该会消除错误,因为他们已在此处修复了问题:https://issuetracker.google.com/issues/150106190
把这个配置放到app里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")
如果还是有问题,可以尝试使用上面的
4.5.3
版本 而不是4.7.1
来降级库
Reference
【讨论】:
感谢重播 MatPag,但不幸的是,这两个选项都不起作用。 真的很奇怪:/ 仔细检查您的 XML 文件,您可能在某处有一些错误阻止了绑定类的生成。开始尝试从 XML 中删除绑定元素(数据中的元素) @GuilhE 更新了答案,添加了 Kotlin DSL 版本 我在回答中添加了一个小免责声明,旨在解决特定问题。谢谢你的评论:) 非常感谢您的回答。我用解决方案更新了我的问题。【参考方案2】:在我的项目中,此错误是由我的一个 Room DAO 中的不正确查询引起的。修复查询消除了错误。
很遗憾,错误消息没有明确指出错误的来源。
【讨论】:
【参考方案3】:我在通过添加更新实体/模型类时遇到了同样的问题
private int isSale = 0;
问题是我没有为上述属性创建 setter getter,因此 Room 数据库被混淆并引发编译时异常,即用于代码生成的 ANTLR 工具版本 4.5.3 与当前运行时版本 4.7 不匹配.1.
【讨论】:
啊!节省我的一天时间【参考方案4】:这对我来说是一个非常令人沮丧的问题。因为这个错误掩盖了真正的问题。正如上面@MatPag 所提到的,这确实不是特定于某个问题,它可能是任何问题。
在尝试了我可以在网络上找到的任何东西几个小时后,我有了检查 Android Project View sidebar
中生成的文件的想法,偶然发现dataBinding
生成的文件中有一些错误。解决此问题的方法是了解这些错误并在 XML 文件中修复它们。对我来说,变量名有些冲突。
【讨论】:
【参考方案5】:对我来说,当我不小心在 Textview
中使用了绑定 xmlns 时出现了这个问题,该绑定实际上映射到了可以与 ImageView
一起使用的适配器。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:binding="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="pokemonObj"
type="in.curioustools.architectures.models.Pokemon" />
</data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:layout_margin="4dp"
android:background="@drawable/bg_rect_curve_8_solid_light_fffef2"
android:gravity="center"
android:orientation="vertical"
android:padding="8dp"
tools:ignore="ContentDescription">
<ImageView
android:id="@+id/eachrow_iv_pokemon"
android:layout_
android:layout_
android:layout_gravity="center"
android:background="@drawable/bg_circle_white_fff"
android:padding="4dp"
android:scaleType="fitXY"
binding:url="@pokemonObj.imageUrl"
tools:src="@android:drawable/ic_menu_camera" />
<TextView
android:id="@+id/eachrow_tv_pokemon_name"
android:layout_
android:layout_
android:layout_gravity="center"
android:layout_margin="8dp"
android:fontFamily="@font/roboto_slab_bold"
android:gravity="center"
android:textColor="@color/black"
android:textSize="16sp"
binding:url="@pokemonObj.name" <!-- WRONG -->
tools:background="#eee"
tools:text="Pikachu" />
</LinearLayout>
</layout>
这里绑定了一个函数:
public class AllBindingAdapters
// All are bound to the xmlns:binding schema
companion object
@JvmStatic
@BindingAdapter(" binding:url")
public fun bindImage(view: ImageView, receivedUrl: String?)
GlideAnimatedLoader.loadImage(view, receivedUrl)
【讨论】:
花了我几个小时才发现这是问题所在,谢谢!我希望数据绑定构建错误没有那么神秘。 XML 的语法突出显示已关闭(“我遇到了同样的错误,在我的情况下,这是由于 xml 布局中的错误导入引起的。我重构并更改了我的包名称,但在 xml 文件中并没有改变相同的错误。它向我显示了同样的错误。我遍历所有片段、活动和布局,检查是否有任何错误的导入/缺少导入。清除所有导入和变量问题后,构建成功。
<data class="MainActivityBinding">
<variable
name="vm"
type="com.abcd.efg.home.MapViewModel" />
</data>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_
android:layout_
android:fitsSystemWindows="true"
tools:openDrawer="start">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_>
<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/includeAppBar"
android:layout_
android:layout_
android:theme="@style/AppTheme.AppBarOverlay"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/toolbar_container"
android:layout_
android:layout_>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
android:background="@color/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/app_name"
app:titleTextColor="@color/white" />
</FrameLayout>
</com.google.android.material.appbar.AppBarLayout>
<fragment
android:id="@+id/navigation"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_
android:layout_
app:defaultNavHost="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/includeAppBar"
app:navGraph="@navigation/nav_main" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/sideNV"
android:layout_
android:layout_
android:layout_gravity="start"
android:background="@color/drawerBackground"
android:fitsSystemWindows="true"
android:shadowColor="@color/white"
app:headerLayout="@layout/nav_header_home"
app:menu="@menu/activity_main_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
【讨论】:
可以在“.”后面加空格吗(句号)和“,”(逗号)之后?另见run-onsentences 和infinitive (base) form of the verb with a helper verb, not past tense。【参考方案7】:我的问题是因为我更改了 XML 文件中 <variable />
标记内使用的数据模型,而没有更改 XML 文件本身。
希望对大家有所帮助
【讨论】:
【参考方案8】:由于将 com.google.android.material:material
从 1.1.0-alpha09
升级到 1.3.0-alpha01
而出现错误
【讨论】:
【参考方案9】:就我而言,我所要做的就是添加可选的 Kotlin 扩展和协程支持以支持 room 依赖项:
implementation "androidx.room:room-ktx:$version_room"
【讨论】:
【参考方案10】:对我有用的解决方案是在房间依赖项上排除模块 org.antlr:antlr4-runtime
,如下所示:
implementation ("androidx.room:room-ktx:$version_room")
exclude group: 'org.antlr', module: 'antlr4-runtime'
kapt("androidx.room:room-compiler:$room_version")
exclude group: 'org.antlr', module: 'antlr4-runtime'
在build.gradle
。这个解决方案是最干净的,而不是使用resolutionStrategy
块。
【讨论】:
【参考方案11】:如果有人来这里寻求答案但还没有找到,这就是我的情况。问题是我没有指定requireAll
参数,结果必须明确设置。所以这是我的代码:
@BindingAdapter("firstAttr", "secondAttr", requireAll = false)
fun View.yourFunction(firstAttr: Boolean, secondAttr: Boolean = false) ...
另外请注意,您可以为上述属性设置默认值。
【讨论】:
【参考方案12】:对我来说,我为绑定和工具使用了相同的命名空间。应该不一样。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
【讨论】:
以上是关于用于代码生成的 ANTLR Tool 版本 4.5.3 与当前运行时版本 4.7.1 不匹配的主要内容,如果未能解决你的问题,请参考以下文章