一 、高频率使用语法
#keep 保留,例如 -keepattributes:表示保留属性 -keep:符合条件的类和类成员既不会被压缩也不会被混淆 -keepnames是-keep,allowshrinking的缩写, 而allowshrinking的意思是允许符合条件的类和类成员被压缩(删除) #一颗星表示只是保持该包下的类名,而子包下的类名还是会被混淆;两颗星表示把本包和所含子包下的类名都保持; -keep class com.dengdongqi.test.** -keep class com.dengdongqi.test.* #保持类名,又保持类里面的具体方法和变量命名不被混淆 -keep class com.dengdongqi.test.** {*;} #dont 不要,例如 -dontwarn:表示不要提示警告 #ignore 忽略,例如 -ignorewarning:表示忽略警告 #关闭压缩 -dontshrink # 不优化 -dontoptimize # 包名不使用大小写混合 aA Aa -dontusemixedcaseclassnames # 不混淆第三方引用的库 -dontskipnonpubliclibraryclasses # 不做预校验 -dontpreverify
二、规则
1.反射用到的类不混淆 2.JNI方法不混淆 3.AndroidMainfest中的类不混淆 4.四大组件和Application的子类和Framework层下所有的类默认不会进行混淆 5.Parcelable的子类和Creator静态成员变量不混淆,否则会产生android.os.BadParcelableException异常 6.使用GSON、fastjson等框架时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象 7.使用第三方开源库或者引用其他第三方的SDK包时,需要在混淆文件中加入对应的混淆规则 8.有用到WEBView的JS调用也需要保证写的接口方法不混淆 9.如果使用了枚举要保证枚举不被混淆 10.数据库db类不要混淆 11.如果使用了自定义控件那么要保证它们不参与混淆