我有以下代码:
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,rate& status)不要混淆。即如下
public interface interface1 {
void method4(Integer ID);
void method5(Integer rate, boolean status);
}
怎么可能?
答案 0 :(得分:2)
您可以通过向// list of all components without enable field in it
Component[] components = obj.GetComponents(typeof(Component));
int indexOfComponentToChange = 1; // index of the component to disable
Behaviour castedToBehaviour = components[indexOfComponentToChange] as Behaviour;
if ( castedToBehaviour != null )
{
castedToBehaviour.enabled = false;
}
添加额外标志来保留方法的参数。它们看起来像这样:
-keepattributes
不幸的是,这使得参数不仅在您想要的界面中被混淆,而且在整个项目中。也许那对你没问题。
如果您使用随Android SDK一起提供的默认proguard配置,那么您还可以使用特殊注释来防止某些类进行模糊处理。 Check it out
答案 1 :(得分:0)
public interface SSOListener {
void sendDataToAnalytics(String event, JSONArray object);
}
// In my case JsonArray was obfuscated.
Solution :
-keep class org.json.JSONArray**, ** {
protected <fields>;
public <fields>;
<methods>;
}
答案 2 :(得分:0)
-keepattributes LocalVariableTable,LocalVariableTypeTable
上述keepattributes对我不起作用。但是-keepparameternames
做到了。我将此添加到我们的Android库使用的内部Proguard配置中。其他非Keot类仍然对其参数进行了混淆。
注意:我正在使用R8进行模糊处理,这是使用Android Gradle插件since 3.4.0时的默认设置,此外,我们还将源和目标的兼容性强制为1.8(由于不相关的okhttp依赖关系)
答案 3 :(得分:-1)
ProGuard使用Java字节码的命名约定,如类文件名和堆栈跟踪中所示。因此:
-keep public interface com.somepackage.SomeClass$someInterface {*;}
如果您的界面不公开。
-keep interface com.somepackage.SomeClass$someInterface {*;}.