Android Proguard - 如何保持仅从XML布局引用的onClick处理程序

And*_*zie 13 android proguard

在我的Android应用程序中,我不会在代码中创建View的on-click处理程序,但依赖于在XML布局文件中指定它的能力,如下所示:

   <Button
        ....
        android:onClick="onSearchClicked"
       ...../>
Run Code Online (Sandbox Code Playgroud)

然后让Activity中的方法如下:

    public void onSearchClicked( View v ) {
    ........}
Run Code Online (Sandbox Code Playgroud)

这意味着在我自己的代码中没有明显的参考.

在为生产版本运行Proguard时,它似乎删除了此方法,并且点击失败.

我可以添加到我的proguard配置文件中以避免这种情况,这不会让我重命名所有这些方法吗?

  • 我可以添加到方法的注释,并注意到proguard?
  • 以某种方式指定从xml引用的这些类型的方法?
  • 我想我可以在代码中添加一个错误的引用,但是如果可以的话我想避免这样做,因为我不会永远记得把它放进去!

我已经查看了针对Android的proguard示例,并且看不到任何针对此特定需求的内容.

And*_*zie 22

这似乎是最好的答案,因为它对这些方法的命名是100%健壮的:

# This will avoid all the onClick listeners referenced from XML Layouts from being removed
-keepclassmembers class * extends android.app.Activity { 
       public void *(android.view.View); 
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.