构建Android发行版apk时,Smack 4.1有哪些适当的ProGuard规则?
目前,我正在使用aSmack github存储库上的README.asmack文件中的aSmack 4.0.x中的规则,该存档过时(引用旧类名,用于4.0.x)。我找不到任何适用于4.1.x的正确程序规则的参考,是否有人可以阐明这一点?
答案 0 :(得分:8)
Smack 4.1构建时的适当Proguard规则是什么? Android发布apk?
取决于“适当”对你意味着什么。
最简单的方法可能是tell ProGuard to keep all classes and interfaces的Smack。
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }
或者,您可以配置ProGuard,使其仅保留您实际使用的Smack部分,并让ProGuard剥离其他所有内容。但要这样做,您需要很好地了解您的应用程序如何使用Smack。例如,参见MAXS传输XMPP的ProGuard配置:https://bitbucket.org/projectmaxs/maxs/src/75efeba8d8470b89da8cd8551304bb00648e4945/transport-xmpp/proguard-project.txt?at=master#cl-20
请注意如果您不确切知道自己在做什么,那么Smack会出现意外行为甚至崩溃。如果您知道自己在做什么,只能微调ProGuard!
答案 1 :(得分:1)
实际上,我的经验表明,如果您还使用了proguard并且已启用minify,则实际上可能需要额外的一行。如果你收到错误
java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
然后需要以下配置:
-keepattributes Signature
-keep class org.jivesoftware.smack.** { *; }
-keep class org.jivesoftware.smackx.** { *; }
有关详细信息,请参阅:smack for android fails when using proguard。