I am using the smack library (4.1.2) in my Android application to connect to the XMPP server. It works great when the code is NOT counted (i.e. C proguard). But in release mode, with proguard turned on, the application crashes as soon as it connects to the server.
I try to ensure that all relevant smack classes are unminified, as suggested here: What are the recommended ProGuard rules for Smack 4.1?
-keep class org.jivesoftware.smack.** { *; } -keep class org.jivesoftware.smackx.** { *; }
But for me it does not work. The trace of the accident stack is shown below.
java.lang.ExceptionInInitializerError at org.jivesoftware.smackx.privacy.PrivacyListManager.<init>(PrivacyListManager.java:126) at org.jivesoftware.smackx.privacy.PrivacyListManager.getInstanceFor(PrivacyListManager.java:210) at org.jivesoftware.smackx.privacy.PrivacyListManager$1.connectionCreated(PrivacyListManager.java:81) at org.jivesoftware.smack.tcp.XMPPTCPConnection.initConnection(XMPPTCPConnection.java:636) at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:834) at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:365) ... Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType at org.jivesoftware.smack.filter.FlexibleStanzaTypeFilter.<init>(FlexibleStanzaTypeFilter.java:40) at org.jivesoftware.smackx.privacy.filter.SetActiveListFilter.<init>(SetActiveListFilter.java:27) at org.jivesoftware.smackx.privacy.filter.SetActiveListFilter.<clinit>(SetActiveListFilter.java:25)
Any ideas on what proguard config fix this?
Update: I already mentioned another problem in my report and explained that the proposed solution is not a solution in this case.
Update 2: I restored the stack trace with line numbers enabled.
android proguard xmpp android-proguard smack
Steve
source share