Java android版本中的对象反序列化
我正在开发一个android应用程序,它必须与服务器通信(都是用java编写的)。为了通信,我使用自定义序列化对象(ObjectStream)。问题是,当我用调试配置构建我的android应用程序时,一切都很好,但是如果我使用发布配置,我在服务器端的反序列化过程中会遇到以下错误 java.lang.ClassNotFoundException:d.a.b.d.dJava android版本中的对象反序列化,java,android,release,Java,Android,Release,我正在开发一个android应用程序,它必须与服务器通信(都是用java编写的)。为了通信,我使用自定义序列化对象(ObjectStream)。问题是,当我用调试配置构建我的android应用程序时,一切都很好,但是如果我使用发布配置,我在服务器端的反序列化过程中会遇到以下错误 java.lang.ClassNotFoundException:d.a.b.d.d 如何解决此问题?甚至可能吗?将此添加到您的/app/proguard rules.pro文件的末尾: -keepnames class
如何解决此问题?甚至可能吗?将此添加到您的
/app/proguard rules.pro
文件的末尾:
-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 <fields>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
-keepnames类*实现java.io.Serializable
-keepclassmembers类*实现java.io.Serializable{
静态最终长SerialVersionId;
私有静态final java.io.ObjectStreamField[]serialPersistentFields;
!静态!瞬态;
私有void writeObject(java.io.ObjectOutputStream);
私有void readObject(java.io.ObjectInputStream);
java.lang.Object WriterReplace();
java.lang.Object readResolve();
}
这将防止proguard名称损坏可序列化类。将其添加到
/app/proguard rules.pro
文件的末尾:
-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 <fields>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
-keepnames类*实现java.io.Serializable
-keepclassmembers类*实现java.io.Serializable{
静态最终长SerialVersionId;
私有静态final java.io.ObjectStreamField[]serialPersistentFields;
!静态!瞬态;
私有void writeObject(java.io.ObjectOutputStream);
私有void readObject(java.io.ObjectInputStream);
java.lang.Object WriterReplace();
java.lang.Object readResolve();
}
这将防止proguard名称损坏可序列化类。该错误可能是由proguard引起的。请尝试
-保留-在proguard配置中发送的类。该错误可能是由proguard引起的。请尝试-保留-在proguard配置中发送的类。现在它可以识别类名,但serialVersionUID不匹配。java.io.InvalidClassException:本地类不兼容:stream classdesc serialVersionUID=-4153259734270116860,本地类serialVersionUID=-6717172171618781649您可能需要在服务器端和客户端设置serialVersionUID。否则,它将由编译器生成。现在它可以识别类名,但serialVersionUID不匹配。java.io.InvalidClassException:本地类不兼容:stream classdesc serialVersionUID=-4153259734270116860,本地类serialVersionUID=-6717172171618781649您可能需要在服务器端和客户端设置serialVersionUID。否则,它将由编译器生成。