如何为android数据绑定点击监听器编写proguard规则?
Posted
技术标签:
【中文标题】如何为android数据绑定点击监听器编写proguard规则?【英文标题】:How to write progaurd rules for android databinding click listener? 【发布时间】:2019-12-08 12:50:21 【问题描述】:我在我的应用程序中使用databinding
,它运行良好。但是当我启用minifyEnabled true
和shrinkResources 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 步
//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 服务时如何为客户端分发自定义类