【发布时间】:2016-12-24 14:44:53
【问题描述】:
在我的应用程序中,我有一些类,它们实现了Serializable/Externalizable 接口。
在反编译后,实现Serializable或Externalizable的类具有a, b等混淆名称,但字段和方法的名称保持不变。方法体也被混淆了。
同样的问题影响Enum,它有方法和字段(除了它们自己的实例)。
我的proguard-rules.pro 文件是下一个
-optimizationpasses 5
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-dontwarn android.support.**
-keepclasseswithmembernames, includedescriptorclasses class * {
native <methods>;
}
-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }
-keep public class * extends android.support.v4.view.ActionProvider {
public <init>(android.context.Context);
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
-keepclassmembers, allowoptimization enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
更多细节:在添加 -keepclassmembers class * implements java.io.Serializable {...} 部分之前,我的应用程序在反序列化步骤中失败。我在 ProGuard 的网站上尝试了examples,但只有最后一个有效。
那么在这种情况下我该怎么办?是否有混淆类的配置,完全实现Serializable/Externalizable?
【问题讨论】:
标签: android proguard serializable