我在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.
后跟以下错误消息...
我在这里关注了类似的帖子,导致了这种情况,这是上面错误消息的结尾。
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)
我也试过
- 清理项目,然后重新生成项目
- 文件 -> 使缓存失效/重新启动
- 打开和关闭安卓工作室
连接到数据绑定的布局文件如下所示
<?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">
溶液
错误是由错误引起的。我确实设置了可见性
android:visibility="@{viewmodel.errorContainerVisible ? View.VISIBLE : View.GONE}"
忘记导入
<data>
<import type="android.view.View"/>
免责声明:
下面的修复旨在解决一些特定问题 依赖项冲突,主要是数据绑定问题可能导致此错误,但 仅是错误的 XML 或代码的结果,并且 在这种情况下,下面的解决方案将不起作用。在尝试以下解决方案之前,请仔细检查您的 XML/代码正确性。
这是某些数据绑定版本(嵌入在 Android Studio 中)和其他依赖项(如导入不同版本org.antlr:antlr4
库Room
)的已知问题。
更新日期: 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")
}
}
如果仍有问题,可以尝试使用上面的
4.5.3
版本 而不是4.7.1
降级库
参考
在我的项目中,此错误是由我的一个房间 DAO 中的错误查询引起的。修复查询消除了错误。
不幸的是,错误消息没有清楚地指示错误的来源。
我在更新实体/模型类时遇到了同样的问题,只需添加
private int isSale = 0;
问题是我没有为上述属性创建 setter getter,因此房间数据库感到困惑并抛出编译时异常,即用于代码生成的 ANTLR 工具版本 4.5.3 与当前运行时版本 4.7.1 不匹配。
这对我来说是一个非常令人沮丧的问题。因为这个错误掩盖了真正的问题。正如上面@MatPag提到的,这确实不是特定于某些问题,它可以是任何东西。
经过几个小时的尝试,我可以在网上找到任何东西,我有了检查AndroidProject View sidebar
中生成的文件的想法,偶然地我注意到dataBinding
生成的文件中有一些错误。解决此问题的方法是了解这些错误并在XML文件中修复它们。对我来说,这是变量名称中的一些冲突。
对我来说,当我不小心在实际映射到可与ImageView
一起使用的适配器的Textview
中使用绑定xmlns时,就会弹出此问题。
<?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_width="match_parent"
android:layout_height="wrap_content"
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_width="80dp"
android:layout_height="80dp"
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_width="150dp"
android:layout_height="wrap_content"
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 文件中的相同内容。它向我展示了同样的错误。我浏览了所有片段,活动和布局,以检查是否有任何错误的导入/缺少导入。清除所有导入和变量问题后,构建成功。
<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_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<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_width="0dp"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
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_width="0dp"
android:layout_height="0dp"
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_width="wrap_content"
android:layout_height="match_parent"
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>
我的问题是由于我更改了 XML 文件中<variable />
标记内使用的数据模型,并且没有更改 XML 文件本身。
希望它能帮助某人
由于将com.google.android.material:material
从1.1.0-alpha09
升级到1.3.0-alpha01
而出现错误
就我而言,我所要做的就是添加可选的Kotlin 扩展和协程支持,以支持房间依赖关系:
implementation "androidx.room:room-ktx:$version_room"
对我有用的解决方案是排除对房间依赖项的模块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
块。
如果有人来这里寻求答案并且还没有找到答案,这是我的情况。问题是我没有指定requireAll
参数,结果必须显式设置它。所以这是我的代码:
@BindingAdapter("firstAttr", "secondAttr", requireAll = false)
fun View.yourFunction(firstAttr: Boolean, secondAttr: Boolean = false) { ... }
另请注意,您可以为上述属性设置默认值。
对我来说,我为绑定和工具使用相同的命名空间。它应该是不同的。
<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">
就我而言,该问题是由错误的名称包引起的 "nav_graph.xml"文件,在"参数"标签中,"app:argType"字符串。
就我而言,当我在房间实体文件中添加新字段时,出现问题。但是,一旦我删除了此字段,问题就消失了。