【问题标题】:Smack Crashing with ProGuard使用 ProGuard 进行 Smack 崩溃
【发布时间】:2015-11-10 12:07:19
【问题描述】:

我的应用程序运行良好没有 ProGuard,即 minifyEnabled 错误

但是当我将 minifyEnabled 设置为 true 时,应用程序开始崩溃。

我正在使用 Android Studio (v1.4.1) 和 Gradle(com.android.tools.build:gradle:1.3.0)

注意:我已将 Smack Jar 放在 /libs 文件夹中

build.gradle

dependencies {
   compile fileTree(include: ['*.jar'], dir: 'libs')
   compile 'com.android.support:appcompat-v7:23.1.0'//23.0.1
   compile 'com.android.support:design:23.1.0'//23.0.1

   //_____________3rd party
   compile 'joda-time:joda-time:2.8.2'
   compile 'org.jxmpp:jxmpp-core:0.4.1'
   compile 'org.jxmpp:jxmpp-util-cache:0.4.1' 
   compile 'de.measite.minidns:minidns:0.1.1'
   compile 'org.apache.httpcomponents:httpcore:4.3.2'
   compile 'org.apache.httpcomponents:httpmime:4.3.5'

   //_____________library jars
   compile files('libs/smack-core-4.1.2-sources.jar')
   compile files('libs/smack-android-4.1.2.jar')
   compile files('libs/smack-extensions-4.1.2.jar')
   compile files('libs/smack-im-4.1.2.jar')
   compile files('libs/smack-sasl-provided-4.1.2.jar')
   compile files('libs/smack-tcp-4.1.2.jar')

   android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
      }
      useLibrary 'org.apache.http.legacy'
   }
}

proguard-rules.pro

#org.jxmpp
-keep class org.jxmpp.** { *; }
#minidns
-keep class de.measite.minidns.** { *; }
#http
-keep class org.apache.http.** { *; }
#smack4.1
-keep class org.jivesoftware.** { *; }

堆栈跟踪:

11-10 16:32:35.685 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
11-10 16:32:35.685 E/AndroidRuntime: Process: com.thesendapp, PID: 7308
11-10 16:32:35.685 E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
11-10 16:32:35.685 E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:304)
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
11-10 16:32:35.685 E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-10 16:32:35.685 E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)
11-10 16:32:35.685 E/AndroidRuntime:  Caused by: java.lang.ExceptionInInitializerError
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.PrivacyListManager.<init>(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.PrivacyListManager.getInstanceFor(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.PrivacyListManager$1.connectionCreated(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.initConnection(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smack.AbstractXMPPConnection.connect(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at isol.services.h.a(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at isol.services.h.doInBackground(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:292)
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-10 16:32:35.685 E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
11-10 16:32:35.685 E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818) 
11-10 16:32:35.685 E/AndroidRuntime:  Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smack.filter.FlexibleStanzaTypeFilter.<init>(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.filter.SetActiveListFilter.<init>(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.filter.SetActiveListFilter.<clinit>(Unknown Source)
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.PrivacyListManager.<init>(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.PrivacyListManager.getInstanceFor(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smackx.privacy.PrivacyListManager$1.connectionCreated(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.initConnection(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at org.jivesoftware.smack.AbstractXMPPConnection.connect(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at isol.services.h.a(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at isol.services.h.doInBackground(Unknown Source) 
11-10 16:32:35.685 E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:292) 
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
11-10 16:32:35.685 E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
11-10 16:32:35.685 E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
11-10 16:32:35.685 E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818) 

【问题讨论】:

标签: android android-studio xmpp proguard smack


【解决方案1】:

嗯,我找到了答案, 为 Smack 库添加以下规则

proguard-rules.pro

-keepattributes Signature
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多