推荐的 Smack 4.1 的 ProGuard 规则是什么?

10

构建Android发布apk时,Smack 4.1的适当ProGuard规则是什么?

目前,我正在使用来自aSmack github存储库的README.asmack文件中aSmack 4.0.x的规则,但这已经过时(引用了旧的类名称,并且只适用于4.0.x)。我找不到任何有关4.1.x使用的正确proguard规则的参考,有人可以解答吗?

2个回答

8

在构建Android发布apk时,Smack 4.1的适当Proguard规则是什么?

这取决于您对“适当”的理解。

最简单的方法可能是告诉ProGuard保留Smack的所有类和接口

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

或者,您可以配置ProGuard,使其仅保留您实际使用的Smack部分,并让ProGuard剥离其他所有内容。但要这样做,您需要很好地了解您的应用程序如何使用Smack。例如,请参阅MAXS的Transport XMPP的ProGuard配置:https://bitbucket.org/projectmaxs/maxs/src/75efeba8d8470b89da8cd8551304bb00648e4945/transport-xmpp/proguard-project.txt?at=master#cl-20

请注意,如果您不确定自己在做什么,则Smack可能会表现出意外行为甚至崩溃。只有在您知道自己在做什么时才微调ProGuard!


这个答案适用于4.2.x吗? - MiguelHincapieC

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.** { *; }

请查看:使用proguard时,安卓版Smack失败 以获取更多详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接