2015-09-15 2 views
2

Я разрабатываю приложение, которое использует Quickblox SDK. Если я скомпилирую его с помощьюОшибка Quickblox и Pro Guard

minifyEnabled false 

Это нормально. Но если включить Минимизировать запутать код я получаю следующее сообщение об ошибке:

09-15 15:00:50.865 12029-12029/com.app.meet E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.app.meet, PID: 12029 
java.lang.ExceptionInInitializerError 
     at com.g.b.d.a(Unknown Source) 
     at com.app.meet.App.j(Unknown Source) 
     at com.app.meet.j.a(Unknown Source) 
     at com.app.meet.h.e.onServiceConnected(Unknown Source) 
     at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1208) 
     at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1225) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5254) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Caused by: java.lang.IllegalStateException: java.lang.ClassNotFoundException: org.jivesoftware.smack.initializer.VmArgInitializer 
     at c.b.a.q.<clinit>(Unknown Source) 

Я заметил, что пакет org.jivesoftware.smack находится внутри quickblox-андроида-СДК-чат-2.3.1.jar

читая некоторые ответы на сайте я изменил мой proguard-rules.pro так:

#QuickBlox 
-keep class org.jivesoftware.smack.initializer.VmArgInitializer { public *; } 
-keep class org.jivesoftware.smack.ReconnectionManager { public *; } 
-keep class com.quickblox.module.c.a.c { public *; } 
-keep class com.quickblox.module.chat.QBChatService { public *; } 
-keep class com.quickblox.module.chat.QBChatService.loginWithUser { public *; } 
-keep class com.quickblox.module.chat.listeners.SessionCallback { public *; } 
-keep class * extends org.jivesoftware.smack { public *; } 
-keep class org.jivesoftware.smack.** { public *; } 
-keep class org.jivesoftware.smackx.** { public *; } 
-keep class com.quickblox.** { public *; } 
-keep class * extends org.jivesoftware.smack { public *; } 
-keep class * implements org.jivesoftware.smack.debugger.SmackDebugger { public *; } 

Я надеюсь, что кто-то имеет представление о том, что проблема может быть здесь.

ответ

5

Это правила proguard, которые заставили его работать. Надеюсь, это поможет кому-то.

-dontwarn org.** 
-dontwarn okio.** 
-dontwarn com.squareup.** 
##---------------Begin: proguard configuration common for all Android apps ---------- 
-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-dontpreverify 
-verbose 
-dump class_files.txt 
-printseeds seeds.txt 
-printusage unused.txt 
-printmapping mapping.txt 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-allowaccessmodification 
-keepattributes *Annotation* 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 
-repackageclasses '' 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 
-dontnote com.android.vending.licensing.ILicensingService 

# Explicitly preserve all serialization members. The Serializable interface 
# is only a marker interface, so it wouldn't save them. 
-keepclassmembers class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

# Preserve all native method names and the names of their classes. 
-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembernames class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

# Preserve static fields of inner classes of R classes that might be accessed 
# through introspection. 
-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

# Preserve the special static methods that are required in all enumeration classes. 
-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep public class * { 
    public protected *; 
} 

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 
##---------------End: proguard configuration common for all Android apps ---------- 

# Remove Logging statements 
-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** v(...); 
    public static *** e(...); 
    public static *** i(...); 
} 

##---------------Begin: proguard configuration for Gson ---------- 
# Gson uses generic type information stored in a class file when working with fields. Proguard 
# removes such information by default, so configure it to keep all of it. 
-keepattributes Signature 

# Gson specific classes 
-keep class sun.misc.Unsafe { *; } 
#-keep class com.google.gson.stream.** { *; } 

# Application classes that will be serialized/deserialized over Gson 
-keep class com.antew.redditinpictures.library.imgur.** { *; } 
-keep class com.antew.redditinpictures.library.reddit.** { *; } 

##---------------End: proguard configuration for Gson ---------- 

#QuickBlox 
-keep class org.jivesoftware.smack.** { *; } 
-keep class com.quickblox.** { *; } 
-keep class * extends org.jivesoftware.smack { public *; } 
-keep class org.jivesoftware.smack.** { public *; } 
-keep class org.jivesoftware.smackx.** { public *; } 
-keep class com.quickblox.** { public *; } 
-keep class * extends org.jivesoftware.smack { public *; } 
-keep class * implements org.jivesoftware.smack.debugger.SmackDebugger { public *; } 
Смежные вопросы