我为项目启用了proguard并收到以下错误:
01:25:13.221 [ERROR] [org.gradle.BuildExceptionReporter] > java.io.IOException: proguard.ParseException: Expecting opening '(' or separator ';' before '{' in line 147 of file '/blalblah/proguard-rules/release/aapt_rules.txt'
上述行确实看起来很有趣:
# onClick res/layout/host_entry.xml #generated:35
-keepclassmembers class * { *** ${()->cb.onDeleteClicked(host)}(...); }
这看起来像我的布局中的一些copypaste:
<ImageButton
....
android:onClick="${()->cb.onDeleteClicked(host)}" />
所以一些proguard配置生成器认为只有一些方法名称可以指定为onClick
值,只是将表达式放到proguard配置中。
是否有可能在没有摆脱好的lambda onclick处理程序的情况下使其工作?
答案 0 :(得分:3)
AAPT在这里表现正常。它被配置为忽略Proguard配置生成的数据绑定表达式值。但是你的不是数据绑定表达式:
android:onClick="${()->cb.onDeleteClicked(host)}"
相反,您必须使用@{}
:
android:onClick="@{()->cb.onDeleteClicked(host)}"
${}
是一个不受支持的shell表达式。