我有以下代码:
public class MyClass {
public void method1(Integer marks) {
}
private String method3(String name){
}
public interface interface1 {
void method4(Integer ID);
void method5(Integer rate, boolean status);
}
}
我用过progaurd-rules.pro
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keepparameternames
-keep public class *
-keepclassmembers public class *{
public *;
}
-keep public interface packageName.MyClass$interface1 { *; }
混淆代码如下:
public class MyClass {
public void method1(Integer marks) {
}
private String a(String var1){
}
public interface interface1 {
void method4(Integer var1);
void method5(Integer var1, boolean var2);
}
}
我希望接口方法变量(ID,速率和状态)不要混淆。即如下
public interface interface1 {
void method4(Integer ID);
void method5(Integer rate, boolean status);
}
怎么可能?
您可以通过向-keepattributes
添加额外的标志来保留方法的参数。它们看起来像这样:
-keepattributes LocalVariableTable,LocalVariableTypeTable
不幸的是,这不仅可以在您想要的界面中进行混淆,而且可以在整个项目中进行混淆。也许那对你没问题。
如果您使用随Android SDK一起提供的默认proguard配置,那么您还可以使用特殊注释来防止某些类进行模糊处理。 Check it out。
ProGuard使用Java字节码的命名约定,如类文件名和堆栈跟踪中所示。因此:
-keep public interface com.somepackage.SomeClass$someInterface {*;}
如果您的界面不公开。
-keep interface com.somepackage.SomeClass$someInterface {*;}.