贴一下自己的结论:刚又测试了很多遍,又反编译apk包看了一下,终于发现问题所在:第二种混淆方式,会把属性名混淆,这样就会导致:
版本1中,有一个boolean属性flag,经过混淆后,它的属性名被混淆成了a;
版本2中,增加了一个String属性str,再经过混淆后,系统把属性str名混淆成了a,这样就会导致反序列化的时候,属性类型错误,就会报以下错误。
java.lang.IllegalArgumentException: not a primitive field
        at java.lang.reflect.Field.setZField(Native Method)
        at java.lang.reflect.Field.setBoolean(Field.java:621)
        at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1137)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1963)......现在基本确定,混淆序列化对象时,一定要按如下方式混淆,这样应该就不会有问题了
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
*;
}