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

时间:2011-06-02 15:29:00

标签: android proguard

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

   <Button
        ....
        android:onClick="onSearchClicked"
       ...../>

然后在Activity中使用这样的方法:

    public void onSearchClicked( View v ) {
    ........}

意思是在我自己的代码中没有明显的参考。

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

我可以将哪些内容添加到我的proguard配置文件中以避免这种情况,并不会强迫我重命名所有这些方法?

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

我查看了针对Android的proguard示例,看不到任何针对这种特殊需求的内容。

3 个答案:

答案 0 :(得分: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); 
}

希望它有所帮助。

答案 1 :(得分:1)

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

但请从proguard doc仔细检查: http://proguard.sourceforge.net/index.html#/manual/refcard.html

答案 2 :(得分:1)

我用:

-keepclassmembers class * extends android.app.Activity { 
       public void on*Click(android.view.View); 
}

然后我将所有onClick方法命名为:onCancelBtnClick(),onBackgroundClick()等。