android proguard通配符

除此之外,proguard中的通配符也比较让人难懂,proguard-android.txt中就使用到了很多通配符,我们来看一下它们之间的区别:

通配 符描述
<field>匹配类中的所有字段
<method>匹配类中的所有方法
<init>匹配类中的所有构造函数
*

匹配任意长度字符但不含包名分隔符(.)

比如说我们的完整类名是com.example.test.MyActivity

,使用com.*,或者com.exmaple.*都是无法匹配的,

因为*无法匹配包名中的分隔符,

正确的匹配方式是com.exmaple.*.*,

或者com.exmaple.test.*,这些都是可以的。

但如果你不写任何其它内容,只有一个*,

那就表示匹配所有的东西。

**

匹配任意长度字符并且包含包名分隔符(.)

。比如proguard-android.txt中使用的

-dontwarn android.support.**

就可以匹配android.support包下的所有内容,

包括任意长度的子包。

***

匹配任意参数类型。比如void set*(***)

就能匹配任意传入的参数类型

,*** get*()就能匹配任意返回值的类型。

匹配任意长度的任意类型参数

。比如void test(…)就能匹配任意void test(String a)

或者是void test(int a, String b)这些方法。





[ ] 表示里面的内容是可选的。  
@ 表示是一个注解类型  annotationtype的规范与classname类似
...
    [[!]public|final|abstract|@ ...] : ...表示可以写上前面选项中的任意一种或多种。不参与语法
    (argumenttype,...)  :... 参与语法,表示0个或多个任意参数类型
| 表示或
! 表示非 
()在表示方法时,才是语法的一部份;其它时候,只是用来分组
classname 需要使用完全限定类名(即含包名的类名)
    可以使用如下通配符匹配类名:
      ? 匹配一个任意字符
      *  匹配多个任意字符,不含package分隔符.
     ** 匹配多个任意字符,含package分隔符.

属性(fields)和方法(methods):
   它们的规范与java中的规范类似,只是方法中不需要写上参数名,有参数类型即可
   <init>   matches any constructor.  
   <fields>   matches any field.
   <methods>   matches any method.
   * matches any field or method.   注意这四个通配符,本身不含 访问修饰符
   属性或方法后面都要以分号(;)结尾
   属性名或方法名可以使用的通配符:
       ?匹配任意一个字符
       *  匹配任意多个字符
   属性或方法类型(类型可以直接写,如果是一个class,则写上class的完全限定名)可以使用的通配符:
       %  表示任意基本数据类型,不含void
       ?   表示匹配用作类型的 class name的任意一个字符
       *    任意多个字符,不含package分隔符(.)
       **   任意多个字符,含package分隔符(.)    匹配非基本数据类型和非数组类型
             例:  ** get*()  可匹配com.stone.User getCurUser(),
               但不匹配String getName(),也不匹配com.stone.User[ ] getCurUser()。
       ***  匹配任意类型
       ...   表示任意数量的任意参数类型
  构造方法中的class name,可以用短类名或含包名的类名

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值