getSerialVersionUID возвращает другие значения в выпуске, чем в отладке

#java #android #serialization

Вопрос:

Я сталкиваюсь с очень странной проблемой при работе с serialVersionUID в сериализуемом классе. Когда я запускаю в режиме отладки, приведенный ниже код возвращает значение -3853729081041647708, заданное в классе сеанса:

 public class Session implements Cloneable, Serializable {
private static final long serialVersionUID = -3853729081041647708L;
 

Код:

  ObjectStreamClass sess = ObjectStreamClass.lookup(Session.class);
 long stu = sess.getSerialVersionUID();
 

Но когда я запускаю в режиме выпуска, однако, он возвращает совершенно не связанное значение, а именно -5810130834168560095

Это приводит к неправильной работе приложения при установке пользователями. Как такое может быть?

Ответ №1:

Проблема в том, что Proguard меняет serialVersionUID на что-то другое. С

 -keep public class com.xxx.Session
-keep public class * extends com.xxx.Session
-keepclassmembers class com.xxx.Session { *; } 
 

все работает так, как и ожидалось