Android: ProGuard не может найти установщик для атрибута "связать: элементы" в представлении переработчика внутри макета
Ошибка времени компиляции возникает при попытке запустить ProGuard с включенным связыванием данных.
Примечание: тот же код работает, когда proGuard отключен.
Вот сообщение об ошибке консоли
Не удается найти установщик для атрибута
'bind:itemOrders'
с типом параметраjava.util.List<com.example.boss.ItemOrder>
наandroid.support.v7.widget.RecyclerView
,
Вот мой макет, где я связываю представление рециркулятора, используя атрибут связывания.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="com.example.boss.BossViewModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/itemOrderRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/ItemOrders"
bind:itemOrders="@{viewModel.itemOrders}"/>
</RelativeLayout>
</layout>
Вот мой пользовательский метод привязки данных
@BindingAdapter("bind:itemOrders")
public static void bindList(RecyclerView view, List<ItemOrder> itemOrders) {
view.setLayoutManager(new LinearLayoutManager(view.getContext()));
view.setAdapter(new ItemOrderAdapter(itemOrders));
}
Вот мой файл proguard-rules.pro
-keepclassmembers public class com.example.boss.BossViewModel{*;}
-keep class android.databinding.** { *; }
-keepattributes *Annotation*
-keepattributes javax.xml.bind.annotation.*
-keepattributes javax.annotation.processing.*
-keepclassmembers class ** {
@android.databinding.BindingAdapter public *;
}
-dontwarn android.databinding.**
1 ответ
Вы должны изменить пространство имен Shcema от
xmlns:bind="http://schemas.android.com/apk/res-auto"
в
xmlns:bind="http://schemas.android.com/apk/tools"
Кроме того, вы можете удалить префикс привязки из @BindingAdapter
определение - это пространство имен будет игнорироваться.