如何为android数据绑定点击监听器编写proguard规则?

Posted

技术标签:

【中文标题】如何为android数据绑定点击监听器编写proguard规则?【英文标题】:How to write progaurd rules for android databinding click listener? 【发布时间】:2019-12-08 12:50:21 【问题描述】:

我在我的应用程序中使用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_
        android:layout_
        android:orientation="vertical">

        <TextView
            android:id="@+id/action_call_one"
            android:layout_
            android:layout_
            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 规则。任何帮助将不胜感激,谢谢。

【问题讨论】:

***.com/a/57156980/7254873 @SumitShukla 我试过这个,但没有帮助。 你确定是这个错误吗? @coroutineDispatcher 在我尝试构建项目时发生。 就我而言,我有一个带有 android:onClick="@(view)->listener.onClick(view)" 的文件,但布局没有数据绑定(我没有注入监听器,并且布局没有 标签)。我是通过复制粘贴得到的???? 【参考方案1】:

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

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

第 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"

【讨论】:

以上是关于如何为android数据绑定点击监听器编写proguard规则?的主要内容,如果未能解决你的问题,请参考以下文章

如何为我在回收站视图中的卡片视图中的每个项目创建一个点击监听器

使用 AIDL 编写 Android 服务时如何为客户端分发自定义类

如何为多个 Jbutton 编写动作监听器

如何为 Android 电视应用程序及其侦听器创建导航菜单抽屉

Android中如何为Fragment中的按钮添加监听事件

如何为动态生成的<a>标签添加事件 ,只有点击时触发?