2016-08-17 1 views
0

Dans mon application j'ai quelques classes, qui implémente l'interface Serializable/Externalizable.ProGuard n'obstrue pas complètement la classe Serializable

Après les cours de décompilation, qui met en œuvre Serializable ou Externalizable ont des noms comme obscurcie a, b et ainsi de suite, mais les noms des champs et méthodes restent les mêmes. Les corps de méthodes sont obfusqués aussi.

Le même problème affecte Enum, qui a des méthodes et des champs (sauf leurs propres instances).

Mon fichier proguard-rules.pro est à côté

-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); 
} 

un détail: avant l'ajout de -keepclassmembers class * implements java.io.Serializable {...} partie mon application échoué à l'étape de désérialisation. J'ai essayé examples depuis le site de ProGuard, mais seulement le dernier fonctionne.

Alors, que puis-je faire dans ce cas? Existe-t-il une configuration pour masquer les classes, qui implémente complètement Serializable/Externalizable?

Répondre

0

La ligne avec -keepclassmembers préserve en effet les noms de la plupart des champs et des méthodes. Comme expliqué dans le manuel ProGuard> Exemples>Processing serializable classes, vous pouvez avoir besoin de cette ligne si vous sérialisez des classes qui n'ont pas de champs serialVersionUID. Si vous ajoutez ces champs, vous pouvez probablement utiliser une configuration moins conservatrice qui masque davantage de méthodes.

+0

honte à moi, je vais essayer maintenant et répondre le plus tôt possible et merci beaucoup) –