简单proguard保持选项的差异

时间:2016-09-28 12:32:52

标签: java proguard

这两个proguard选项有什么区别?

 -keep class com.myclass.**
 -keep class com.myclass.** { *; }

2 个答案:

答案 0 :(得分:1)

第一条规则只保留本身(以及默认构造函数)。

第二条规则还会在课程中保留所有方法字段

答案 1 :(得分:1)

-keep class com.myclass.**

保留com.myclass包和所有子包中的所有类。即使缩小和优化步骤应该改变或删除这些类的结构,也不要这样做。

-keep class com.myclass.** { *; }

保留上面定义的com.myclass包中的所有类以及这些类中的所有字段和方法。

区别的一个例子:使用第一个命令,我的入口点方法(例如main)仍然可以缩小,优化和混淆。为了保持这些方法的签名完整,我可以指定我需要保留的方法或字段(或者只是通配符*,尽管我认为它太宽泛了)。这对于必须保持签名和名称完整的反射和其他情况至关重要。

请注意-keepnames和类似的命令也会保留签名,但前提是它们在缩小时尚未删除。