步奏1.开启混淆标志
步奏2.编写混淆规则文件:proguard-rules.pro
###混淆基本规范:
#忽略警告
-ignorewarning
#是否使用大小写混合
-dontusemixedcaseclassnames
#是否混淆第三方jar
-dontskipnonpubliclibraryclasses
#预校验
-dontpreverify
#保持枚举 enum 类不被混淆
-keepclassmembers enum * {*;}
#抛出异常时保留代码行号
-keepattributes SourceFile,LineNumberTable
#保持 native 方法不被混淆
-keepclasseswithmembernames class * {
native <methods>;
}
#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# -------- Gson 相关的混淆配置--------
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
#此包不能混淆
-keep class com.changda.smartsystemlockbp.bean.**{*;}
#所有Activity
-keep public class * extends android.app.Activity
所有在web界面使用的封装对象不能混淆
步奏3.打包
Proguard关键字
关键字 描述
keep 保留类和类中的成员,防止被混淆或移除
keepnames 保留类和类中的成员,防止被混淆,成员没有被引用会被移除
keepclassmembers 只保留类中的成员,防止被混淆或移除
keepclassmembernames 只保留类中的成员,防止被混淆,成员没有引用会被移除
keepclasseswithmembers 保留类和类中的成员,防止被混淆或移除,保留指明的成员
keepclasseswithmembernames 保留类和类中的成员,防止被混淆,保留指明的成员,成员没有引用会被移除
Proguard通配符
通配符 描述
<field> 匹配类中的所有字段
<method> 匹配类中所有的方法
<init> 匹配类中所有的构造函数
* 匹配任意长度字符,不包含包名分隔符(.)
** 匹配任意长度字符,包含包名分隔符(.)
*** 匹配任意参数类型