【问题标题】:ProGuard doesn't obfuscates Serializable class completelyProGuard 不会完全混淆 Serializable 类
【发布时间】:2016-12-24 14:44:53
【问题描述】:

在我的应用程序中,我有一些类,它们实现了Serializable/Externalizable 接口。

在反编译后,实现SerializableExternalizable的类具有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


    【解决方案1】:

    -keepclassmembers 行确实保留了大多数字段和方法的名称。如 ProGuard 手册 > 示例 > Processing serializable classes 中所述,如果您序列化没有 serialVersionUID 字段的类,则可能需要此行。如果添加这些字段,您可能可以使用不那么保守的配置来混淆更多方法。

    【讨论】:

    • 不好意思,我现在试试,尽快回复,非常感谢)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2019-09-28
    相关资源
    最近更新 更多