如何使用带数据绑定的proguard(aapt_rules.txt中的proguard.ParseException)?

时间:2017-04-29 22:49:05

标签: android proguard android-databinding

我为项目启用了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处理程序的情况下使其工作?

1 个答案:

答案 0 :(得分:3)

AAPT在这里表现正常。它被配置为忽略Proguard配置生成的数据绑定表达式值。但是你的不是数据绑定表达式:

android:onClick="${()->cb.onDeleteClicked(host)}"

相反,您必须使用@{}

android:onClick="@{()->cb.onDeleteClicked(host)}"

${}是一个不受支持的shell表达式。