【问题标题】:Quickblox and Pro Guard errorQuickblox 和 Pro Guard 错误
【发布时间】:2015-09-15 20:20:01
【问题描述】:

我正在开发一个使用 Quickblox SDK 的应用程序。如果我用

编译它
minifyEnabled false

它工作得很好。但是,如果我启用 minify 来混淆代码,我会收到以下错误:

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-android-sdk-chat-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 *; }

我希望有人知道这里可能存在什么问题。

【问题讨论】:

    标签: android proguard quickblox


    【解决方案1】:

    这些是使它工作的 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 *; }
    

    【讨论】:

      【解决方案2】:

      上面的答案不适用于我的情况下 quickblox 视频通话,应用程序一次又一次崩溃然后我尝试了另一个有效的专业保护规则。

      转到应用程序中的 proguard-rules.pro(app) 文件并复制并粘贴到所有行下方。它的工作

      ##---------------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
      
      # For using GSON @Expose annotation
      -keepattributes *Annotation*
      
      # 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.quickblox.core.account.model.** { *; }
      
      #quickblox sample chat
      -keep class com.quickblox.auth.parsers.** { *; }
      -keep class com.quickblox.auth.model.** { *; }
      -keep class com.quickblox.core.parser.** { *; }
      -keep class com.quickblox.core.model.** { *; }
      -keep class com.quickblox.core.server.** { *; }
      -keep class com.quickblox.core.rest.** { *; }
      -keep class com.quickblox.core.error.** { *; }
      -keep class com.quickblox.core.Query { *; }
      
      -keep class com.quickblox.users.parsers.** { *; }
      -keep class com.quickblox.users.model.** { *; }
      
      -keep class com.quickblox.chat.parser.** { *; }
      -keep class com.quickblox.chat.model.** { *; }
      
      -keep class com.quickblox.messages.parsers.** { *; }
      -keep class com.quickblox.messages.model.** { *; }
      
      -keep class com.quickblox.content.parsers.** { *; }
      -keep class com.quickblox.content.model.** { *; }
      
      -keep class org.jivesoftware.** { *; }
      
       #sample chat
      -keep class android.support.v7.** { *; }
      -keep class com.bumptech.** { *; }
      
      -dontwarn org.jivesoftware.smackx.**
      -dontwarn android.support.v4.app.**
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 2013-01-13
        • 1970-01-01
        相关资源
        最近更新 更多