安卓代码混淆规则

混淆规则

#============================== General Part ==============================#

# 指定压缩级别,代码进行迭代优化的次数。
# 迭代会在最后一次无法优化的时候停止。一般为5。
-optimizationpasses 20

# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
# 不启用优化,建议使用此选项。使用热修复建议使用此选项关闭优化。
# proguard的优化选项和java虚拟机中的字节码dex优化有冲突,可能会产生一些未知的问题
#-dontoptimize

# 不要跳过对非公开类的处理,默认是跳过。
-dontskipnonpubliclibraryclasses

# 混淆时采用的算法,后面的参数是一个过滤器
# 这个过滤器是谷歌推荐的算法,一般也不会改变
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

# 混淆时不使用大小写混合类名
-dontusemixedcaseclassnames

# 指定相同的混淆名称对应不同类的相同成员,不同的混淆名称对应不同的类成员。
#-useuniqueclassmembernames

# 不做预校验,preverify是proguard的4个步骤之一
# Android不需要preverify,去掉这一步可加快混淆速度
#-dontpreverify

# 保留注解参数
#-keepattributes *Annotation*
#-keep class * extends java.lang.annotation.Annotation {*;}

# 保留参数名
-keepparameternames

# 避免混淆泛型
-keepattributes Signature

# 保留内部类
-keepattributes InnerClasses

# 抛出异常时保留代码行号
#-keepattributes SourceFile,LineNumberTable

# 将文件来源重命名为“SourceFile”字符串
#-renamesourcefileattribute SourceFile

# 重新包装所有重命名的包并放在给定的单一包中
#-flattenpackagehierarchy com.networkhelper.lib

# 将包里的类混淆成n个再重新打包到一个统一的package中
# 会覆盖flattenpackagehierarchy选项
-repackageclasses com.example.xxxxx.lib

# 优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification

# 混淆时记录日志。混淆后生产映射文件 map类名 -> 转化后类名 的映射。
-verbose

# 保留枚举类不被混淆
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# 保留Parcelable序列化类不被混淆
-keepclassmembers class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator CREATOR;
}

# 保留Serializable序列化类不被混淆
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# 保留资源不被混淆
-keepclassmembers class **.R$* {
    public static <fields>;
}

-keeppackagenames com.example.xxxxx

-keep class com.example.xxxxx.aaa {public *;}
-keep class com.example.wxxxx.bbb {public *;}

你可能感兴趣的:(android,java,开发语言)