首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用ProGuard击打

用ProGuard击打
EN

Stack Overflow用户
提问于 2015-11-10 12:07:19
回答 1查看 399关注 0票数 0

我的应用程序在没有 ProGuard的情况下运行良好的minifyEnabled,即使用minifyEnabled false。

但是,当我将minifyEnabled转换为true时,应用程序就开始崩溃。

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

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

build.gradle

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
#org.jxmpp
-keep class org.jxmpp.** { *; }
#minidns
-keep class de.measite.minidns.** { *; }
#http
-keep class org.apache.http.** { *; }
#smack4.1
-keep class org.jivesoftware.** { *; }

Stacktrace:

代码语言:javascript
运行
复制
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) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-13 07:02:58

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

proguard-rules.pro

代码语言:javascript
运行
复制
-keepattributes Signature
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33629625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档