Привязка данных NoSuchMethodError с помощью buildtools 3.4.0 - PullRequest
0 голосов
/ 16 января 2019

При использовании последней привязки данных

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'

Есть ли способ обойти это, если мы хотим использовать новейшие инструменты сборки?

1 Ответ

0 голосов
/ 20 марта 2019

Одна из ваших библиотек опирается на привязку данных и распространяется с созданными классами привязки данных, созданными с помощью инструментов сборки 3.3 (или более ранних версий). Проблема вызвана критическим изменением, появившимся в последней бета / 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: https://issuetracker.google.com/issues/122936785

UPDATE
Проблема была исправлена, и исправление доступно в 3.5 beta 1 (оно также будет доступно в следующей версии 3.4.1)

...