【问题标题】:How to write progaurd rules for android databinding click listener?如何为android数据绑定点击监听器编写proguard规则?
【发布时间】: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_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 规则。任何帮助将不胜感激,谢谢。

【问题讨论】:

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

标签: android proguard android-databinding android-r8


【解决方案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}"

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多