buildTypes {
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
// shrinkResources true
//混淆 moren默认是false 是不混淆 设置设置 true开启混淆
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}-renamesourcefileattribute SourceFile
-optimizationpasses 5 # 指定代码的压缩级别
-dontusemixedcaseclassnames # 是否使用大小写混合
-dontskipnonpubliclibraryclasses # 是否混淆第三方jar
-dontpreverify # 混淆时是否做预校验
-verbose # 混淆时是否记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法
-dontwarn
-keep public class * extends android.app.Activity # 保持哪些类不被混淆
-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
;
}
-keepclasseswithmembers class * { # 保持自定义控件类不被混淆
public
(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public
(android.content.Context, android.util.AttributeSet, int); # 保持自定义控件类不被混淆
}
-keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆
public void *(android.view.View);
}
-keepclassmembers enum * { # 保持枚举 enum 类不被混淆
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆
public static final android.os.Parcelable$Creator *;
}
##--------------------------------------------以上配置 一般 不会变------------------------------------
#如果有引用v4包可以添加下面这行
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
#如果引用了v4或者v7包
-dontwarn android.support.**
-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*(...); } #保持自定义组件不被混淆 -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*(...); } #保持 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(); } #自己项目特殊处理代码(这些地方我使用了Gson类库和注解,所以不希望被混淆,以免影响程序) -keep class com.otb.designerassist.entity.** {*;} -keep class com.otb.designerassist.http.rspdata.** {*;} -keep class com.otb.designerassist.service.** {*;} ###-------- Gson 相关的混淆配置-------- -keepattributes Signature -keepattributes *Annotation* -keep class sun.misc.Unsafe { *; } ###------------极光推送混淆配置(官网有混淆配置的说明)-------------------------- -dontoptimize -dontpreverify -keepattributes EnclosingMethod,Signature -dontwarn cn.jpush.** -keep class cn.jpush.** { *; } -dontwarn cn.jiguang.** -keep class cn.jiguang.** { *; } -keepclassmembers class ** { public void onEvent*(**); } ###------------bageview 混淆配置-------------------------- -keep class com.jauker.widget.** {*;} ###------------imageloader 混淆配置-------------------------- -keep class com.nostra12.universalimageloader.** {*;} ###---------------bean 不混淆-------------- -keep class com.cjy.hrapp.hrapp.bean.*{*;} ####-----------------字典 moudle不混淆------------ -dontwarn solid.ren.skinlibrary.** -keep class solid.ren.skinlibrary.*{*;} empty
然后我们有反编译看看 混淆过的代码啥样子