首页 > 编程语言 >java proguard混淆通配符

java proguard混淆通配符

时间:2022-11-24 14:35:09浏览次数:53  
标签:字符 java 通配符 proguard 分隔符 匹配 任意 mypackage


类名 通配符如下:
| 通配符 | 含义 |
| --- |
| ? | 匹配单个字符,包名分隔符(.)除外 |
| * | 匹配除(.)外的任意字符 |
| ** | 匹配任意字符(包含.),如com.rush.**匹配com.rush包下的所有类及其所有子包的类。 |

字段和方法 通配符如下:
| 通配符 | 含义 |
| --- |
| <init> | 匹配所有构造方法 |
| <fields> | 匹配所有字段 |
| <methods> | 匹配所有方法 |
| ? | 匹配单个字符,包名分隔符(.)除外 |
| * | 匹配除(.)外的任意字符 |

类型 通配符如下:
| 通配符 | 含义 |
| --- |
| % | 匹配原始类型,如int, boolean等 |
| ? | 匹配任意单个字符 |
| * | 匹配除包名分隔符(.)外的任意字符 |
| ** | 匹配任意字符,包括包名分隔符(.) |
| *** | 匹配任意类型(原始类型、非原始类型、数组或非数组类型)|
| ... | 匹配任意参数个数,任意参数类型 |

其中类配置完整定义如下,其中[]表示可选:

######说明:
***"[]“***方括号表示里面的内容是可选的;
***"..."***省略号表示可以能很多选项;
***"|"***竖线划分了不同的选择
"()"普通非粗体括号表示属于同一组的属性

- ***class***关键字表示任何类或接口,***interface*** 仅指示接口,***enum***关键字仅指示枚举;***interface,enum***前面加一个***"!"***表示非既是不是接口也不是枚举。
- 每个***classname***必须是全名,如:***java.lang.String、com.example.ClassName***;同时***classname***还可以是包含下面一些通配符的正则表达式:

***?*** 问号匹配单个字符,但不能是包名分隔符;如:***"mypackage.Test?"***,能匹配***"mypackage.Test1"、
"mypackage.Test2"***,但是不能匹配***"mypackage.Test12"***;

***\**** 单个星号能匹配任意多个字符,但除了包分隔符,如:***"mypackage.\*Test\*"***,能匹配***”mypackage.Test、mypackage.YourTestApplication“***,但是不能匹配***"mypackage.mysubpackage.MyTest"***; ***"mypackage.\*"***匹配包mypackage下面的类,但不包括它的子包里面的类;
***\*\**** 双星号匹配任意多个字符,包括包名的分隔符;如:***"\*\*.Test"***,匹配了所有Test类,***"mypackage.\*"***匹配了包mypackage下面的所有子类,包括它的子包的类。

- ***extends 、implements*** 指示一个特定的类,既是表示继承或者是实现了指定的类(接口)的类才符合条件。
- ***@*** 指示被注释类型注释了的类或类成员。注释类型与类名一样被指定。
- 类成员、方法和java语法差不多,方法参数就想javadoc一样,不用包含参数名称。成员、方法也可以包含一些通配符:
***<init>*** 匹配了构造方法;
***<fields>*** 匹配了成员变量;
***<methods>*** 匹配了方法;
***\**** 匹配了任意成员、方法;
上面这些没有任何返回类型,只有***"<init>"***有参数列表。
成员变量、方法也可以是包含通配符的正则表达式。可以包含以下通配符:
***?*** 匹配方法中任何单个字符;
***\**** 匹配方法中任何多个字符;
类型可以包含一下通配符
***%*** 匹配方法中的原始类型(***"boolean"、"int"...***,不包括***"void"***);
***?*** 匹配类名中的单个字符;
***\**** 匹配类名中的多个字符,不包括包分隔符;
***\*\**** 匹配类名中的多个字符,包括包分隔符;
***\*\*\**** 匹配原始类型,非原始类型,数组、非数组
***\-\-\-*** 匹配任意数量和类别的参数。
注意:***?、\*、\*\**** 不会匹配原始类型,只有**\*\*\***可以;如:***"\*\* get\*()"***匹配***“java.lang.Object getObject()”*** 不会匹配***"float getFloat()"*** 也不匹配***"java.lang.Object[] getObjects()"***;
- 构造函数可以用短名(不含包名),或者全名(含包名);java中构造函数可以有参数,但没有返回类型。
- 可以设置类,类成员访问修饰符(***public,private...***),它们通常帮助限制通配符类和成员。只能匹配具有指定修饰符的类或者成员。**"!"**表示非。
容许设置多个标识(***"public static"***),但如果它们是冲突的就只能设置一个(如***public***和***private***)

ProGuard支持编译器设置的一些修饰符***synthetic、bridge、varargs***;

下面是一些简单的列子:

标签:字符,java,通配符,proguard,分隔符,匹配,任意,mypackage
From: https://blog.51cto.com/u_15458814/5883904

相关文章