android - Serialization / Deserialization & Proguard -


with 1 of app, had problem 1 of serialized classes when try update apk.

indeed, there problems related objects saved previous version of apk , new version of apk.

in latest apk (in production on android market), i've forgot configure proguard.cfg serializable class (and static final long serialversionuid member)...

so when try in new apk reload previous stored serializable class, i've invalidclassexception problem in stacktrace ddms :

04-24 18:17:40.120: w/system.err(1204): java.io.invalidclassexception: cu; incompatible class (suid): cu: static final long serialversionuid =6593847879518920343l; expected cu: static final long serialversionuid =0l; 04-24 18:17:40.125: w/system.err(1204):     @ java.io.objectinputstream.verifyandinit(objectinputstream.java:2380) 04-24 18:17:40.125: w/system.err(1204):     @ java.io.objectinputstream.readnewclassdesc(objectinputstream.java:1662) 04-24 18:17:40.125: w/system.err(1204):     @ java.io.objectinputstream.readclassdesc(objectinputstream.java:683) 04-24 18:17:40.125: w/system.err(1204):     @ java.io.objectinputstream.readnewobject(objectinputstream.java:1803) 04-24 18:17:40.125: w/system.err(1204):     @ java.io.objectinputstream.readnonprimitivecontent(objectinputstream.java:787) 04-24 18:17:40.125: w/system.err(1204):     @ java.io.objectinputstream.readobject(objectinputstream.java:2003) 04-24 18:17:40.125: w/system.err(1204):     @ java.io.objectinputstream.readobject(objectinputstream.java:1960) 

i know obfuscation problem serializable objects , serialversionuid...

after reading proguard , serialized java objects here expose problem, i'm not able solve problem...

in next apk i've add in proguard.cfg :

-keepnames class * implements java.io.serializable  -keepclassmembers class * implements java.io.serializable {     static final long serialversionuid;     private static final java.io.objectstreamfield[] serialpersistentfields;     !static !transient ;     private void writeobject(java.io.objectoutputstream);     private void readobject(java.io.objectinputstream);     java.lang.object writereplace();     java.lang.object readresolve(); }

to avoid problem next updates, need these old objects...

i've try change serialversionuid 6593847879518920343l or 0l, no success...

any idea ?

thanks in advance answers !

you try this:

  1. compute serialversionuids of obfuscated serializable classes , add them current source code.
  2. obfuscate new code, preserving serialversionuids, making sure serializable classes mapped earlier obfuscated names (with option -applymapping).

Popular posts from this blog

How to calculate SNR of signals in MATLAB? -

c# - Attempting to upload to FTP: System.Net.WebException: System error -

ios - UISlider customization: how to properly add shadow to custom knob image -