android onClick事件和职业后卫

时间:2011-07-12 14:58:12

标签: android xml callback proguard

我在上传到市场之前试图混淆我的应用。 我已经设置了专业保护,我已经处理了Serialzie问题(prog guard maul - serialize)但是当我尝试按下主屏幕中的一个按钮时,我仍然遇到问题(MethodNotFoundException)。 它们是带有背景的简单LinearLayout,在xml中有android:onClick =“doOnClick”属性。在我的HomeScreenActivity我有一个名为的方法:
public void doOnClick(View v){...}
只要按下按钮就应该调用。 代码工作 GREAT 没有混淆,但一旦混淆了android类加载器无法找到我的方法。在我进入之前只使用代码而不是xml回调(可能是可取的)我想知道它是否有一个很好的方法。 试图防止方法混淆对我来说不起作用(试图防止混淆扩展Activity的方法,并且在(android.view.View)上的形式为public void ;或者public void On (android.view.View)。

如果有人这样做了,我会很感激提示: - )

3 个答案:

答案 0 :(得分:0)

这很简单,这应该有效。

-keepclasseswithmembers class MyActivity {
   public void doOnClick(android.view.View);
}

答案 1 :(得分:0)

将其添加到您的proguards文件中。

-keep class com.android.toto.ClassName {
    public void doOnClick(android.view.View);
}

答案 2 :(得分:0)

-keep或keepclasswithmemebers不适用,因为我已经有-keep public class * extends android.app.Activity,其中包括所有活动。

我设法找到了这样的问题,即通过proguard优化完全删除了这些方法,并替换为直接内联代码。发生这种情况是因为代码中没有对这些函数的特定调用;请注意,不考虑对代码的XML调用。

将以下内容添加到proguard配置中可以解决问题:

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