【发布时间】:2016-09-28 12:32:52
【问题描述】:
这两个proguard选项有什么区别?
-keep class com.myclass.**
-keep class com.myclass.** { *; }
【问题讨论】:
这两个proguard选项有什么区别?
-keep class com.myclass.**
-keep class com.myclass.** { *; }
【问题讨论】:
第一条规则将只保留类本身(以及默认构造函数)。
第二条规则还将保留类中的所有方法和字段。
【讨论】:
-keep class com.myclass.**
保留com.myclass 包和任何子包中的所有类。即使缩小和优化步骤会改变或删除这些类的结构,也不要这样做。
-keep class com.myclass.** { *; }
保留上面定义的 com.myclass 包中的所有类以及这些类中的所有字段和方法。
差异示例:使用第一个命令,我的入口点方法(例如main)仍然可以缩小、优化和混淆。为了保持这些方法的签名完好无损,我可以指定我需要保留的方法或字段(或者像你一样只指定通配符*,尽管我认为这太宽泛了)。这对于反射和其他签名和名称必须保持完整的情况至关重要。
请注意,-keepnames 和类似命令也会保留签名,但前提是它们在收缩期间尚未被删除。
【讨论】: