InvalidClassCastException в .jar след използване на proguard

Използвам eclipse за разработване на приложение за Android. Когато натисна Run (зеления триъгълник), приложението работи добре. Но аз активирах proguard и приложението се срива. Използвам proguard-android.txt по подразбиране, който присъства в sdk/tools/proguard.

Имам буркан, наречен Software.jar, който има няколко класа. Един от тях (Data) е сериализуем клас.(with serialversionUID=112358L). Това е (вероятно) частта, която причинява грешката.

Това е регистърът на грешките (не знам защо, но се показва в жълто като предупреждение):

07-22 15:29:46.429: W/System.err(2051): java.io.InvalidClassException: software.Data; Несъвместим клас (SUID): софтуер. Данни: статичен окончателен дълъг serialVersionUID =112358L; но се очаква софтуер. Данни: статичен окончателен дълъг serialVersionUID =-4551990835091843772L; 07-22 15:29:46.433: W/System.err(2051): в java.io.ObjectInputStream.verifyAndInit(ObjectInputStream.java:2380) 07-22 15:29:46.433: W/System.err(2051) : в java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1662) 07-22 15:29:46.437: W/System.err(2051): в java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683) 07 -22 15:29:46.437: W/System.err(2051): в java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1803) 07-22 15:29:46.441: W/System.err(2051): в java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787) 07-22 15:29:46.441: W/System.err(2051): в java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003) 07- 22 15:29:46.441: W/System.err(2051): в java.io.ObjectInputStream.readObject(ObjectInputStream.java:1960) 07-22 15:29:46.445: W/System.err(2051): в java.util.ArrayList.readObject(ArrayList.java:657) 07-22 15:29:46.445: W/System.err(2051): в java.lang.reflect.Me thod.invokeNative(Собствен метод) 07-22 15:29:46.449: W/System.err(2051): в java.lang.reflect.Method.invoke(Method.java:511) 07-22 15:29:46.449 : W/System.err(2051): в java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1354) 07-22 15:29:46.449: W/System.err(2051): в java.io.ObjectInputStream. readHierarchy(ObjectInputStream.java:1266) 07-22 15:29:46.453: W/System.err(2051): в java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1855) 07-22 15:29:46.453: W/System.err(2051): в java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787) 07-22 15:29:46.457: W/System.err(2051): в java.io.ObjectInputStream.readObject (ObjectInputStream.java:2003) 07-22 15:29:46.457: W/System.err(2051): в java.io.ObjectInputStream.readObject(ObjectInputStream.java:1960) 07-22 15:29:46.457: W /System.err(2051): в com.mainpackage.FullGenPhysics.a(Неизвестен източник) 07-22 15:29:46.457: W/System.err(2051): в com.main package.de.run(Неизвестен източник)

и това са червените линии (грешка в етикета)

07-22 15:29:46.465: E/AndroidRuntime(2051): ФАТАЛНО ИЗКЛЮЧЕНИЕ: Thread-161 07-22 15:29:46.465: E/AndroidRuntime(2051): java.lang.NullPointerException 07-22 15:29: 46.465: E/AndroidRuntime(2051): в software.Gen_Phy.a(Неизвестен източник) 07-22 15:29:46.465: E/AndroidRuntime(2051): в software.Gen_Phy.a(Неизвестен източник) 07-22 15: 29:46.465: E/AndroidRuntime(2051): в software.Gen_Phy.(Неизвестен източник) 07-22 15:29:46.465: E/AndroidRuntime(2051): в com.mainpackage.FullGenPhysics.a(Неизвестен източник) 07- 22 15:29:46.465: E/AndroidRuntime(2051): в com.mainpackage.de.run(Неизвестен източник) 07-22 15:29:46.465: W/ActivityManager(333): Принудително завършване на дейността com.mainpackage/. FullGenPhysics 07-22 15:29:46.525: E/SocketStream(112): readFully чакаше 403440 байта, получи 49152 07-22 15:29:46.525: E/SocketStream(112): readFully чакаше 354288 байта, получи 16384 07-22 15:29:46.529: E/SocketStream(112): readFully чакаше 337904 байта, получи 1624 07-22 1 5:29:46.529: E/SocketStream(112): readFully чакаше 336280 байта, получи 49152 07-22 15:29:46.533: E/SocketStream(112): readFully чакаше 287128 байта, получи 16384 07-22 15:29:46.533: E/SocketStream(112): readFully чакаше 270744 байта, получи 1624 07-22 15:29:46.537: E/SocketStream(112): readFully чакаше 269120 байта, получи 49152 07-22 15:29:46.537: E/SocketStream(112): readFully чакаше 219968 байта, получи 16384 07-22 15:29:46.537: E/SocketStream(112): readFully чакаше 203584 байта, получи 1624 07-22 15:29:46.541: E/SocketStream(112): readFully чакаше 201960 байта, получи 49152 07-22 15:29:46.541: E/SocketStream(112): readFully чакаше 152808 байта, получи 16384 07-22 15:29:46.541: E/SocketStream(112): readFully чакаше 136424 байта, получи 1624 07-22 15:29:46.545: E/SocketStream(112): readFully чакаше 134800 байта, получи 49152 07-22 15:29:46.545: E/SocketStream(112): readFully чакаше 85648 байта, получи 16384 07-22 15:29:46.549: E/SocketStream(112): readFully чакаше 69264 байта, получи 1624 07-22 15:29:46.549: E/SocketStream(112): readFully чакаше 67640 байта, получи 49152 07-22 15:29:46.549: E/SocketStream(112): readFully чакаше 18488 байта, получи 16384

Смешното е, че имам system.out в един от класовете на software.jar. Това се отпечатва.

Опитах да добавя и -libraryjars C:\Users\Harsh\git\marks++\Marks++\Software.jar

-keep  class Software.**

към вече споменатия .txt файл

Къде греша?

РЕДАКТИРАНЕ

07-22 16:10:54.957: W/System.err(2233): java.lang.ClassNotFoundException: software.Data
07-22 16:10:54.961: W/System.err(2233):   at java.lang.Class.classForName(Native Method)
07-22 16:10:54.961: W/System.err(2233):   at java.lang.Class.forName(Class.java:217)
07-22 16:10:54.965: W/System.err(2233):   at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2301)
07-22 16:10:54.965: W/System.err(2233):   at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1660)
07-22 16:10:54.965: W/System.err(2233):   at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683)
07-22 16:10:54.969: W/System.err(2233):   at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1803)
07-22 16:10:54.969: W/System.err(2233):   at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
07-22 16:10:54.973: W/System.err(2233):   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003)
07-22 16:10:54.973: W/System.err(2233):   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1960)
07-22 16:10:54.973: W/System.err(2233):   at java.util.ArrayList.readObject(ArrayList.java:657)
07-22 16:10:54.973: W/System.err(2233):   at java.lang.reflect.Method.invokeNative(Native Method)
07-22 16:10:54.977: W/System.err(2233):   at java.lang.reflect.Method.invoke(Method.java:511)
07-22 16:10:54.977: W/System.err(2233):   at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1354)
07-22 16:10:54.977: W/System.err(2233):   at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1266)
07-22 16:10:54.977: W/System.err(2233):   at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1855)
07-22 16:10:54.977: W/System.err(2233):   at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
07-22 16:10:54.977: W/System.err(2233):   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2003)
07-22 16:10:54.977: W/System.err(2233):   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1960)
07-22 16:10:54.977: W/System.err(2233):   at com.mainpackage.FullGenPhysics.a(Unknown Source)
07-22 16:10:54.977: W/System.err(2233):   at com.mainpackage.de.run(Unknown Source)
07-22 16:10:54.981: W/System.err(2233): Caused by: java.lang.NoClassDefFoundError: software/Data
07-22 16:10:54.981: W/System.err(2233):   ... 20 more
07-22 16:10:54.981: W/System.err(2233): Caused by: java.lang.ClassNotFoundException: software.Data
07-22 16:10:54.981: W/System.err(2233):   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
07-22 16:10:54.981: W/System.err(2233):   at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
07-22 16:10:54.981: W/System.err(2233):   at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
07-22 16:10:54.985: W/System.err(2233):   ... 20 more

person harveyslash    schedule 22.07.2014    source източник


Отговори (2)


Изглежда след преминаване през proguard serialVersionUID на вашия serializable клас се променя. Трябва да промените configuration of proguard, за да включите:

-keepclassmembers class software.Data {
    static final long serialVersionUID;

}

Както е описано тук

person Sanjeev    schedule 22.07.2014
comment
сега получавам classnotfoundexception - person harveyslash; 22.07.2014
comment
Моля, публикувайте stacktrace - person Sanjeev; 22.07.2014

Намерих работещо решение след малко експериментиране. Това е, което използвах:

-libraryjars Software.jar
-keep  class software.**{
*;

}
person harveyslash    schedule 22.07.2014