android - Proguard and Object extends Parcelable - Class not found when unmarshalling -


i'm releasing apk. in debug mode, have no error. when sign apk proguard, app works til fourth screen, have deal value object class implement parcelable

 e/parcel(811): class not found when unmarshalling: com.spg.movil.vo.pdv  e/parcel(811): java.lang.classnotfoundexception: com.spg.movil.vo.pdv  e/parcel(811): @ java.lang.class.classforname(native method)  e/parcel(811): @ java.lang.class.forname(class.java:251)  e/parcel(811): @ java.lang.class.forname(class.java:216)  e/parcel(811): @ android.os.parcel.readparcelablecreator(parcel.java:2133)  e/parcel(811): @ android.os.parcel.readparcelable(parcel.java:2097)  e/parcel(811): @ android.os.parcel.readvalue(parcel.java:2013)  e/parcel(811): @ android.os.parcel.readarraymapinternal(parcel.java:2314)  e/parcel(811): @ android.os.bundle.unparcel(bundle.java:249)  e/parcel(811): @ android.os.bundle.getstring(bundle.java:1118)  e/parcel(811): @ android.content.intent.getstringextra(intent.java:4991)  e/parcel(811): @ com.android.server.am.activitystacksupervisor.startactivitylocked(activitystacksupervisor.java:1353)  e/parcel(811): @ com.android.server.am.activitystacksupervisor.startactivitymaywait(activitystacksupervisor.java:977)  e/parcel(811): @ com.android.server.am.activitymanagerservice.startactivityasuser(activitymanagerservice.java:3936)  e/parcel(811): @ com.android.server.am.activitymanagerservice.startactivity(activitymanagerservice.java:3839)  e/parcel(811): @ android.app.activitymanagernative.ontransact(activitymanagernative.java:159)  e/parcel(811): @ com.android.server.am.activitymanagerservice.ontransact(activitymanagerservice.java:2546)  e/parcel(811): @ android.os.binder.exectransact(binder.java:404)  e/parcel(811): @ dalvik.system.nativestart.run(native method)  e/parcel(811): caused by: java.lang.noclassdeffounderror: com/spg/movil/vo/pdv  e/parcel(811): ... 18 more  e/parcel(811): caused by: java.lang.classnotfoundexception: didn't find class "com.spg.movil.vo.pdv" on path: dexpathlist[[directory "."],nativelibrarydirectories=[/vendor/lib, /system/lib]]  e/parcel(811): @ dalvik.system.basedexclassloader.findclass(basedexclassloader.java:67)  e/parcel(811): @ java.lang.classloader.loadclass(classloader.java:497)  e/parcel(811): @ java.lang.classloader.loadclass(classloader.java:457)  e/parcel(811): ... 18 more 

here's vo class :

public class pdv implements parcelable {  int id; int clientid; string canal; string formato; string ciudad; string region; int ndeterminante; string sucursal; int nielsen; string tienda; string calle; string colonia; int cp; int activo; string cadena; int estadoid; string estado;  double latitude; double longitude; string telefono; string contacto; string horarioini; string horariofin;  proyecto proyecto; int idruta; int done; int sincronizado;  // not include in parcelable marker marker;  public marker getmarker() {     return marker; }  public void setmarker(marker marker) {     this.marker = marker; }    @override public int describecontents() {     return 0; }   public pdv(int id, int clientid, string canal, string formato, string ciudad, string region, int ndeterminante,         string sucursal, int nielsen, string tienda, string calle, string colonia, int cp, int activo,         double latitude, double longitude, string telefono, string contacto, string horarioini, string horariofin,         proyecto proyecto, int done, int sincronizado, string cadena, string estado) {     super();     this.id = id;     this.clientid = clientid;     this.canal = canal;     this.formato = formato;     this.ciudad = ciudad;     this.region = region;     this.ndeterminante = ndeterminante;     this.sucursal = sucursal;     this.nielsen = nielsen;     this.tienda = tienda;     this.calle = calle;     this.colonia = colonia;     this.cp = cp;     this.cadena = cadena;     this.estado = estado;     this.activo = activo;     this.latitude = latitude;     this.longitude = longitude;     this.telefono = telefono;     this.contacto = contacto;     this.horarioini = horarioini;     this.horariofin = horariofin;     this.proyecto = proyecto;     this.done = done;     this.sincronizado = sincronizado; }  @override public void writetoparcel(parcel dest, int flags) {     dest.writeint(id);     dest.writeint(clientid);     dest.writestring(canal);     dest.writestring(formato);     dest.writestring(ciudad);     dest.writestring(region);     dest.writeint(ndeterminante);     dest.writestring(sucursal);     dest.writeint(nielsen);     dest.writestring(tienda);     dest.writestring(calle);     dest.writestring(colonia);     dest.writestring(cadena);     dest.writestring(estado);     dest.writeint(estadoid);     dest.writeint(cp);     dest.writeint(activo);     dest.writeint(done);     dest.writeint(sincronizado);     dest.writeint(idruta);     dest.writedouble(latitude);     dest.writedouble(longitude);     dest.writestring(telefono);     dest.writestring(contacto);     dest.writestring(horarioini);     dest.writestring(horariofin);     dest.writeparcelable(proyecto, 0);  }  public static final parcelable.creator<pdv> creator = new parcelable.creator<pdv>() {     @override     public pdv createfromparcel(parcel source) {         return new pdv(source);     }      @override     public pdv[] newarray(int size) {         return new pdv[size];     } };  public pdv(parcel in) {       this.id = in.readint();     this.clientid = in.readint();     this.canal = in.readstring();     this.formato = in.readstring();     this.ciudad = in.readstring();     this.region = in.readstring();     this.ndeterminante = in.readint();     this.sucursal = in.readstring();     this.nielsen = in.readint();     this.tienda = in.readstring();     this.calle = in.readstring();     this.colonia = in.readstring();     this.cadena = in.readstring();     this.estado = in.readstring();     this.estadoid = in.readint();     this.cp = in.readint();     this.activo = in.readint();     this.done = in.readint();     this.sincronizado = in.readint();     this.idruta = in.readint();      this.latitude = in.readdouble();     this.longitude = in.readdouble();      this.telefono = in.readstring();     this.contacto = in.readstring();     this.horarioini = in.readstring();     this.horariofin = in.readstring();     this.proyecto = in.readparcelable(proyecto.class.getclassloader());      } // getters , setters ... } 

and here proguard.project.txt

    ##---------------begin: proguard configuration common android apps ---------- -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontpreverify -verbose -dump class_files.txt  -printseeds seeds.txt  -printusage unused.txt  -printmapping mapping.txt  -optimizations !code/simplification/arithmetic   -injars      bin/classes -injars      libs -outjars     bin/classes-processed.jar    -allowaccessmodification -keepattributes *annotation* -renamesourcefileattribute sourcefile -keepattributes sourcefile,linenumbertable -repackageclasses ''   -keep public class * extends android.app.activity -keep public class * extends android.app.application -keep public class * extends android.app.service -keep public class * extends android.content.broadcastreceiver -keep public class * extends android.content.contentprovider -keep public class * extends android.app.backup.backupagenthelper -keep public class * extends android.preference.preference -keep public class com.android.vending.licensing.ilicensingservice -dontnote com.android.vending.licensing.ilicensingservice  -keep public class * extends android.view.view {     public <init>(android.content.context);     public <init>(android.content.context, android.util.attributeset);     public <init>(android.content.context, android.util.attributeset, int);     public void set*(...); }  # explicitly preserve serialization members. serializable interface # marker interface, wouldn't save them. -keepclassmembers class * implements java.io.serializable {     static final long serialversionuid;     private static final java.io.objectstreamfield[] serialpersistentfields;     private void writeobject(java.io.objectoutputstream);     private void readobject(java.io.objectinputstream);     java.lang.object writereplace();     java.lang.object readresolve(); }   # preserve native method names , names of classes. -keepclasseswithmembers class * {     public <init>(android.content.context, android.util.attributeset); } -keepclassmembers class * extends android.content.context {    public void *(android.view.view);    public void *(android.view.menuitem); } -keepclassmembers class * implements android.os.parcelable {     static ** creator; }  -keepclassmembers class **.r$* {     public static <fields>; }  -keepclassmembers class * {     @android.webkit.javascriptinterface <methods>; }   -keepclasseswithmembernames class * {     public <init>(android.content.context, android.util.attributeset); }   -keepclasseswithmembernames class * {     public <init>(android.content.context, android.util.attributeset, int); }   # preserve static fields of inner classes of r classes might accessed # through introspection. -keepclassmembers class **.r$* {   public static <fields>; }   # preserve special static methods required in enumeration classes. -keepclassmembers enum * {     public static **[] values();     public static ** valueof(java.lang.string); }   -keep public class * {     public protected *; }  -keep class * implements android.os.parcelable {   public static final android.os.parcelable$creator *; } ##---------------end: proguard configuration common android apps ----------   ##---------------begin: proguard configuration gson  ---------- # gson uses generic type information stored in class file when working fields. proguard # removes such information default, configure keep of it. -keepattributes signature   # gson specific classes -keep class sun.misc.unsafe { *; } #-keep class com.google.gson.stream.** { *; }   # application classes serialized/deserialized on gson -keep class com.google.gson.examples.android.model.** { *; }   ##---------------end: proguard configuration gson  ----------  ##---------------begin proguard configuration google maps --------------------  -keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.**  -keep class org.** { *; } -keep class * extends java.util.listresourcebundle {     protected object[][] getcontents(); }  -keep public class com.google.android.gms.common.internal.safeparcel.safeparcelable {     public static final *** null; }  -keepnames @com.google.android.gms.common.annotation.keepname class * -keepclassmembernames class * {     @com.google.android.gms.common.annotation.keepname *; }   -renamesourcefileattribute sourcefile     -keepattributes sourcefile,linenumbertable  ##---------------end proguard configuration google maps --------------------  ##---------------begin proguard configuration libs  ----------------------- -keep class com.todddavies.components.progressbar.** { *; } -dontwarn com.todddavies.components.progressbar.**  -dontwarn org.apache.**   -keepclassmembers class * implements android.os.parcelable {     static ** creator; } 

i have seen several posts, none of them resolved issue

proguard causing runtimeexception (unmarshalling unknown type code) in parcelable class

i change parcelable json strings, have others parcelables objects, , i'm afraid have others similar issue in future.

any appreciated !


Comments

Popular posts from this blog

javascript - how to protect a flash video from refresh? -

android - Associate same looper with different threads -

visual studio 2010 - Connect to informix database windows form application -