【发布时间】:2011-12-14 08:55:54
【问题描述】:
我正在使用 proguard 来混淆我的 android 应用程序。 android 应用程序包含一些本机代码,这些代码对完全限定的 java 方法进行回调。我不需要混淆这些类及其方法的名称。下面正确地保留了类名,但没有保留方法名。
-keep public class com.me.dontobf.*
-keepnames public class com.me.dontobf.*
【问题讨论】:
我正在使用 proguard 来混淆我的 android 应用程序。 android 应用程序包含一些本机代码,这些代码对完全限定的 java 方法进行回调。我不需要混淆这些类及其方法的名称。下面正确地保留了类名,但没有保留方法名。
-keep public class com.me.dontobf.*
-keepnames public class com.me.dontobf.*
【问题讨论】:
对于本机方法: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>;
}
您可能还需要保留方法描述符中出现的所有程序类。
【讨论】:
试试:
-keepclasseswithmembernames class * {
native <methods>;
}
来自 ProGuard 手册:http://proguard.sourceforge.net/manual/examples.html#native
【讨论】: