代码混淆规则
指定代码的压缩级别 -optimizationpasses 5
是否使用大小写混合-dontusemixedcaseclassnames
是否混淆第三方jar. -dontskipnonpubliclibraryclasses
混淆时是否做预校验 -dontpreverify
混淆时是否记录日志 -verbose
混淆时所采用的算法:
-optimizations!code/simplification/arithmetic,!field/,!class/merging/
-keep public class * extends android.app.Activity
基本配置-不能被混淆的
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
support.v4/v7包不混淆
-keep class android.support.* { ; }
-keep class android.support.v4.* { ; }
-keep public class * extends android.support.v4.**
-keep interface android.support.v4.app.* { ; }
-keep class android.support.v7.* { ; }
-keep public class * extends android.support.v7.**
-keep interface android.support.v7.app.* { ; }
-dontwarn android.support.** # 忽略警告
保持注解继承类不混淆
-keep class * extends java.lang.annotation.Annotation {*;}
保持Serializable实现类不被混淆
-keepnames class * implements java.io.Serializable
保持Serializable不被混淆并且enum 类也不被混淆
-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();
}
保持枚举enum类不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
自定义组件不被混淆
-keep public class * extends android.view.View {
public (android.content.Context);
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
public void set*(…);
}
不混淆资源类
-keepclassmembers class *.R$ {
public static ;
}
第三方jar包library混淆配置
ormlite混淆配置
-libraryjars libs/ormlite-android-5.0.jar
-libraryjars libs/ormlite-core-5.0.jar
-dontwarn com.j256.ormlite.**
-keep class com.j256.ormlite.* { ;}
-keep class com.envy15.cherry.base.orm.* { ;}
json-lib混淆配置
-libraryjars libs/json-lib-2.4-jdk15.jar
-dontwarn net.sf.json.**
-keep class net.sf.json.* { ;}
json-lib关联包
-libraryjars libs/commons-beanutils-1.8.3.jar
-dontwarn org.apache.commons.**
-keep class org.apache.commons.* { ;}
universalimageloader图片加载框架不混淆
-keep class com.nostra13.universalimageloader.* { ; }
-dontwarn com.nostra13.universalimageloader.**
Gson相关的不混淆配置
-keepattributes Signature
-keepattributes Annotation
-keep class com.google.gson.* { ; }
-dontwarn com.google.gson.**
-keep class com.envy15.cherry.fragment.crossover.model.* { ; }
-dontwarn com.envy15.cherry.fragment.crossover.model.**
-keep class com.envy15.cherry.fragment.discover.model.* { ; }
-dontwarn com.envy15.cherry.fragment.discover.model.**
-keep class com.envy15.cherry.fragment.local.model.* { ; }
-dontwarn com.envy15.cherry.fragment.local.model.**
-keep class com.envy15.cherry.fragment.setting.model.* { ; }
-dontwarn com.envy15.cherry.fragment.setting.model.**
保持哪些类不被混淆
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
保持 native 方法不被混淆
native <methods>;
-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
public void *(android.view.View);
}
保持枚举 enum 类不被混淆
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
保持自己定义的类不被混淆
-keep class MyClass;