proguard用法

使用方式

        //buildType下的任一个属性都可以
        debug {
            //开启混淆
            minifyEnabled true
            //指定混淆文件
            proguardFiles 'proguard-rules.pro','proguard-extra.pro','proguard-self.pro'
        }

基本语法

常用选项

  1. -libraryjars 应用的依赖包,如android-support-v4
  2. -keep 不混淆某些类
  3. -keepclassmembers 不混淆类的成员
  4. -keepclasseswithmembers 指定的类和类成员被保留,假如指定的类成员存在的话。
  5. -keepnames 不混淆类及其成员名,只在混淆阶段生效。
  6. -keepclassmembernames 不混淆类的成员名,只在混淆阶段生效。
  7. -keepclasseswithmembernames 不混淆类及其成员名,假如指定的类成员名存在,只在混淆阶段生效。
  8. -dontwarn 不提示warnning(缺省proguard 会检查每一个引用是否正确,但是第三方库里面往往有些不会用到的类,没有正确引用。如果不配置的话,系统就会报错。)

占位符

占位符含义
?任何一个单一字符
*名字的一部分,不包含目录或包名分隔符
**名字的一部分,可能包含目录或包名分隔符
$内部类分隔符,如A$B,代表A的内部类B
%任何原始类型 (“boolean”, “int”, etc, but not “void”).
***任何类型 (原始类型 or 非原始类型, array or non-array).
任何数量,任何类型的参数
<⁢init⁢>任何的构造函数
<⁢fields⁢>任何的变量
<⁢methods⁢>任何的方法
*任何的变量和方法

类的结构

类结构图

  • [ ]代表可选的选项。
  • …代表可以定义任意数量的前面的项。
  • | 分割两个可以相互替代的项。
  • ! 代表相反的情况。
  • 缩进只是为了澄清目的意义,实际的配置文件中空格是无关紧要的。

更多

关于proguard更多语法可见:proguard官方文档

不可混淆内容

在代码中根据名字调用的内容不可被混淆。
1. 注解
2. Native 本地方法
3. JNI 代码
4. 枚举类型
5. 反射相关的代码
6. AIDL 所需代码
7. 和 XML 有关联的 class 文件(Proguard 只是针对 class 文件的混淆,而 Android 组件都是通过反射来读取 XML 内信息,如:Activity,Service,ContentProvider,Broadcast,自定义控件,布局文件, AndroidManifest.xml 等)都不可混淆
8. 所有为外部提供的接口和方法尽量保留,因为混淆后文件名被替换,有些被调用对象就可 能找不到源方法。
9. Bean 文件(某些库,比如Gson在使用bean文件时,会根据里面的变量/方法名来解析json串,混淆会导致变量无法被正确赋值)
10. Android 的 R 文件
11. 内部类
12. 第三方类库(含官方 support 库),因为第三方库的不透明性,混淆时尽量保护其不被混淆。
PS:很多第三方库官网提供混淆配置方式,可直接使用官方配置。
13. 自定义 View
14. 实现了 Parcelable 或 Serializable 的序列化类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值