proguard * 和 ** 的语法含义

问题描述 投票:0回答:1

我发现以下两种情况:

-keep class com.android.ons.** {*;}
-keep class com.android.ons.* {*;}

一个使用 **,另一个使用 *。有什么区别?

android proguard
1个回答
0
投票

来自 proguard 手册

类名、注释类型、返回类型和参数类型中的类型可以包含通配符:“?”对于单个字符,'*' 表示任意数量的字符(但不是包分隔符),'**' 表示任意数量(任何)字符,'%' 表示任何基本类型,'***' 表示任何类型, '...' 表示任意数量的参数,'' 表示同一选项中第 n 个匹配的通配符。

单个星号与包分隔符

.
不匹配,该版本的
-keep
不会将类保留在嵌套于
com.android.ons
内的包中。因此,如果有一个名为
com.android.ons.somepackage
的包,如果您只有单个星号版本,则不会保留该包中的类。

双星号版本与包分隔符匹配,因此将保留顶级

com.android.ons
中的所有类以及 com.android.ons
 中嵌套的任何包,因此 
com.android.ons.somepackage
 中的任何类也将被保留。

因此指定单星号版本和双星号版本是多余的。

© www.soinside.com 2019 - 2024. All rights reserved.