Proguard设置为不删除未使用的方法

时间:2012-02-15 18:20:44

标签: android proguard

考虑以下android的代码结构:

package blah;
class A{
    class B{
        public void foo(String s){
        }
    } 
}

我如何告诉proguard不要移除或混淆foo foo在编译时是代码中未使用的函数,但是在运行时从另一个代码运行。

我试过了:

-keep class blah.A.B;

-keepclassmembers class blah.A.B {
  public void foo(String s);
}

等。但没有什么可以阻止Proguard删除该功能。 我不希望proguard改变'foo'的名字。 Proguard可能会更改A类或B类的名称,但不能更改函数名称'foo'。 有什么建议吗?

2 个答案:

答案 0 :(得分:5)

几乎是正确的。在java字节码中,$字符分隔内部类及其外部类的名称(以避免与包名称的歧义)。所以,只保留方法:

-keepclassmembers class blah.A$B {
  public void foo(java.lang.String);
}

答案 1 :(得分:0)

我的方法'myClickHandler'仅在xml文件中引用。

这个

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

停止在我的应用程序中删除它。也许扩展..对你有用