使用buildtools 3.4.0数据绑定NoSuchMethodError

问题描述 投票:4回答:1

使用最新的DataBinding时

classpath 'com.android.tools.build:gradle:3.4.0-alpha10'

NoSuchMethodError在活动加载时崩溃应用程序。使用:

classpath 'com.android.tools.build:gradle:3.2.1'

使数据绑定成功运行。

这是崩溃:

java.lang.NoSuchMethodError: No direct method <init>
(Landroidx/databinding/DataBindingComponent;Landroid/view/View;I)V in 
class Landroidx/databinding/ViewDataBinding; or its super classes
(declaration of 'androidx.databinding.ViewDataBinding'

如果我们想使用最新的构建工具,有没有办法解决这个问题?

android android-gradle android-databinding nosuchmethoderror android-studio-3.4
1个回答
9
投票

其中一个库依赖于数据绑定,并与使用构建工具3.3(或更早版本)构建的生成的数据绑定类一起分发。问题是由数据绑定库的最新beta / rc版本中引入的重大更改引起的。在3.4版本中,androidx.databinding.ViewDataBinding构造函数的签名已从以下更改:

protected ViewDataBinding(DataBindingComponent bindingComponent, View root, int localFieldCount)

至:

protected ViewDataBinding(Object bindingComponent, View root, int localFieldCount)

这使得任何生成的数据绑定类二进制文件与3.4数据绑定库不兼容,导致启动时出现以下异常:

java.lang.NoSuchMethodError: No direct method <init>(Landroidx/databinding/DataBindingComponent;Landroid/view/View;I)V in class Landroidx/databinding/ViewDataBinding; or its super classes (declaration of 'androidx.databinding.ViewDataBinding' appears in /data/app/com.example.idolon-LqF2y8dUMxZoK3PVRlzbzg==/base.apk)
        at com.example.lib.databinding.ActivityLibBinding.<init>(ActivityLibBinding.java:20)
        at com.example.lib.databinding.ActivityLibBindingImpl.<init>(ActivityLibBindingImpl.java:30)
        at com.example.lib.databinding.ActivityLibBindingImpl.<init>(ActivityLibBindingImpl.java:27)
        at com.example.lib.DataBinderMapperImpl.getDataBinder(DataBinderMapperImpl.java:316)
        at androidx.databinding.MergedDataBinderMapper.getDataBinder(MergedDataBinderMapper.java:74)
        at androidx.databinding.DataBindingUtil.bind(DataBindingUtil.java:199)
        at androidx.databinding.DataBindingUtil.bindToAddedViews(DataBindingUtil.java:327)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:306)
        at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)

作为一种解决方法,您可以使用最新的构建工具重建包含数据绑定类的库。

Android Bug跟踪器上的相应错误是:qazxsw poi

UPDATE 该问题已得到修复,修复程序可在3.5 beta 1中获得(它也将在即将发布的3.4.1中提供)

© www.soinside.com 2019 - 2024. All rights reserved.