我发现以下两种情况:
-keep class com.android.ons.** {*;}
-keep class com.android.ons.* {*;}
一个使用 **,另一个使用 *。有什么区别?
来自 proguard 手册:
类名、注释类型、返回类型和参数类型中的类型可以包含通配符:“?”对于单个字符,'*' 表示任意数量的字符(但不是包分隔符),'**' 表示任意数量(任何)字符,'%' 表示任何基本类型,'***' 表示任何类型, '...' 表示任意数量的参数,'
' 表示同一选项中第 n 个匹配的通配符。
单个星号与包分隔符
.
不匹配,该版本的 -keep
不会将类保留在嵌套于 com.android.ons
内的包中。因此,如果有一个名为 com.android.ons.somepackage
的包,如果您只有单个星号版本,则不会保留该包中的类。
双星号版本与包分隔符匹配,因此将保留顶级
com.android.ons
包 中的所有类以及 com.android.ons
中嵌套的任何包,因此
com.android.ons.somepackage
中的任何类也将被保留。因此指定单星号版本和双星号版本是多余的。