在proguard中,如何保留一组类的方法名称?

时间:2011-10-24 18:30:02

标签: java android proguard

我正在使用proguard来模糊我的android应用程序。 android应用程序包含一些本机代码,可以对完全限定的java方法进行回调。我不需要混淆这些类及其方法的名称。下面正确地保留了类名,但不保留方法名。

-keep public class com.me.dontobf.*
-keepnames public class com.me.dontobf.*

2 个答案:

答案 0 :(得分:54)

对于原生方法:ProGuard manual > Examples > Processing native methods

# note that <methods> means any method
-keepclasseswithmembernames,includedescriptorclasses class * {
    native <methods>;
}

在这种情况下,对于回调方法:ProGuard manual > Examples > Processing callback methods

-keep class mypackage.MyCallbackClass {
    void myCallbackMethod(java.lang.String);
}

或者,例如,如果所有公共方法都可能是回调方法:

-keep class mypackage.MyCallbackClass {
    public <methods>;
}

您可能还需要保留方法描述符中出现的任何程序类。

答案 1 :(得分:2)

尝试:

-keepclasseswithmembernames class * {
    native <methods>;
}

从ProGuard手册:http://proguard.sourceforge.net/manual/examples.html#native