如何告诉ProGuard保留用于onClick的功能?

时间:2011-05-21 22:32:43

标签: android proguard

我在我的Android应用程序的某些.xml布局文件中使用android:onClick属性,但ProGuard在运行时会从我的代码中删除这些方法,因为我的代码中没有任何东西在调用它们。

而不是单独指定每个函数,我想将它们命名为listener_functionName,并使用通配符,如-keep listener_*(我知道这是不正确的,但希望它说明了我的目标)。< / p>

如果这可能会很好,但如果不是,我仍然需要知道如何在proguard.cfg文件中指定这些函数。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:20)

根据proguard文件:

  

字段和方法也可能是   使用正则表达式指定。   名称可以包含以下内容   通配符:?匹配任何一个   方法名称中的字符。   *匹配方法名称的任何部分。

所以,你会发现指定

-keep class com.example.MyClass {
  public void listener_*(android.view.View);
}
在你的proguard标志中

答案 1 :(得分:3)

你可以用这种方式为你的所有课程做一次:

-keepclasseswithmembers class * {
    void listener_*(...);
}

答案 2 :(得分:0)

一种更贪婪的方法,应该保持所有&#34; onClick&#34;方法:

-keepclassmembers class * {
    public void * (android.view.View);
}

==&GT;因此,基本上每个具有Android视图作为唯一参数的公共方法都应该在ProGuard中存活下来。