使用DataBinding点击事件构建项目时ProGuard报错求助
DataBinding Lambda点击事件引发的ProGuard错误解决方法
问题场景
你在布局文件中通过DataBinding绑定点击事件:
- 定义了变量
clickHandler,类型为com.example.ui.ClickHandler - TextView的
android:onClick绑定了Lambda表达式:@{(v)-> clickHandler.onClick(v)} - 对应的
ClickHandler接口包含onClick(View)方法
构建项目时触发ProGuard错误:
在D:\Second Repo\app\build\intermediates\aapt_proguard_file\release\aapt_rules.txt:480:33位置提示“Expected field or method name”,对应的自动生成规则为:
-keepclassmembers class * { *** @{(v)-> clickHandler.onClick(v)}(android.view.View); }
解决方案
1. 替换Lambda为方法引用(推荐)
将布局中的Lambda绑定改为直接方法引用写法,这是DataBinding官方推荐的绑定方式,也能避免ProGuard规则生成错误:
android:onClick="@{clickHandler::onClick}"
这种写法会让aapt生成正确的ProGuard规则,无需额外配置。
2. 手动添加ProGuard规则(保留Lambda写法时使用)
如果必须使用Lambda表达式,在项目的proguard-rules.pro文件中添加以下规则,确保ClickHandler的方法不被混淆:
# 保留ClickHandler接口及onClick方法 -keep class com.example.ui.ClickHandler { public void onClick(android.view.View); } # 保留所有实现了ClickHandler接口的类的onClick方法 -keepclassmembers class * implements com.example.ui.ClickHandler { public void onClick(android.view.View); }
添加后,自动生成的错误规则会被自定义规则覆盖,避免解析失败。
3. 升级DataBinding相关依赖
部分旧版本的Android Gradle插件和DataBinding库在处理Lambda绑定的ProGuard规则时存在bug,尝试将gradle插件版本升级到4.0及以上,同步依赖后可能自动修复规则生成问题。
内容的提问来源于stack exchange,提问作者Aagam Shah
相关产品推荐
相关产品推荐

