【问题标题】:Databinding NoSuchMethodError with buildtools 3.4.0数据绑定 NoSuchMethodError 与 buildtools 3.4.0
【发布时间】:2019-06-10 19:31:54
【问题描述】:

使用最新的DataBinding时

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

A NoSuchMethodError 在 Activity 加载时使应用程序崩溃。使用:

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'

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

【问题讨论】:

  • 项目中有androidx吗?原因可能是3.4.0-alpha10 使用androidx 进行数据绑定,因此会崩溃。
  • 我们在这个项目中使用的是androidx。
  • 我在使用 3.4.0-beta05 构建工具上的数据绑定 + AndroidX 的外部库时遇到了同样的问题。 3.3.1 工作得很好。
  • @JacobFerrero 它将在 3.4.1 中修复

标签: android android-gradle-plugin android-databinding nosuchmethoderror android-studio-3.4


【解决方案1】:

您的一个库依赖于数据绑定,并与生成的数据绑定类一起分发,这些类使用构建工具 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)

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

Androig Bug tracker上对应的bug是:https://issuetracker.google.com/issues/122936785

更新
该问题已得到修复,该修复程序在 3.5 beta 1 中可用(它也将在即将发布的 3.4.1 中可用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2019-01-24
    • 2016-05-01
    • 2016-05-10
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多