我在上传到市场之前试图混淆我的应用。
我已经设置了专业保护,我已经处理了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)。
如果有人这样做了,我会很感激提示: - )
答案 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);
}