4

databinding在我的应用程序中使用它,它运行良好。但是当我启用它时minifyEnabled trueshrinkResources true它会显示一些错误。

Execution failed for task':app:transformClassesAndResourcesWithR8ForDebug'.
Caused by: com.android.tools.r8.utils.AbortException: Error: D:\TUK_Sep_Conclave\TUK_Septmber\app\build\intermediates\proguard-rules\debug\aapt_rules.txt, offset: 48276, line: 457, column: 33, Expected field or method name at D:\TUK_Sep_Conclave\TUK_Septmber\app\build\intermediates\proguard-rules\debug\aapt_rules.txt:457:33

-keepclassmembers class * { *** @{(view)->listener.onClick(view)}(android.view.View); }
                            ^
at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:101)

Suppressed: com.android.tools.r8.shaking.ProguardRuleParserException: Expected field or method name at D:\TUK_Sep_Conclave\TUK_Septmber\app\build\intermediates\proguard-rules\debug\aapt_rules.txt:457:33
-keepclassmembers class * { *** @{(view)->listener.onClick(view)}(android.view.View); }

layout.xml的是

<?xml version="1.0" encoding="utf-8"?>
<layout 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"
    tools:context="com.example.ui.user.activity.ContactUsActivity"
    tools:ignore="HardcodedText">

    <data>

        <variable
            name="listener"
            type="com.example.ui.user.activity.ContactUsActivity" />

    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/action_call_one"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?android:attr/selectableItemBackground"
            android:clickable="true"
            android:focusable="true"
            android:gravity="center"
            android:onClick="@{(view)->listener.onClick(view)}"
            android:padding="3dip"
            android:text="+91-1234567890"
            android:textColor="@android:color/white"
            android:textSize="12sp" />

    </LinearLayout>

</layout>

现在我的问题是如何为android数据绑定和点击监听器编写progaurd规则。任何帮助将不胜感激,谢谢。

4

1 回答 1

3

这是一个非常古老的问题,但可以回答其他将面临这个问题的人。

请检查这些步骤以解决问题。

步骤1

//Don't forget to add this rule in proguard-rules.pro

-keepclassmembers class * extends android.app.Activity {
     public void *(android.view.View);
 }

第2步

请仔细检查调用的布局文件

android:onClick="@{(view)->listener.onClick(view)}"

检查顶部它必须包含变量

<variable
    name="listener"
    type="com.example.ui.user.activity.ContactUsActivity" />

如果上面的任何布局文件中缺少变量,就会出现错误。

步骤#3

如果您的问题尚未解决,那么您必须更改

android:onClick="@{(view)->listener.onClick(view)}"

android:onClick="@{listener::onClick}"
于 2020-12-08T12:52:05.427 回答