## Add project specific ProGuard rules here. ## By default, the flags in this file are appended to flags specified ## in D:\Android\sdk/tools/proguard/proguard-android.txt ## You can edit the include path and order by changing the proguardFiles ## directive in build.gradle. # # ################################ ## ## 公共部分(固定不变) ## ################################ ##1.基本指令区 ## 代码混淆压缩比,在0~7之间,默认为5,一般不做修改 #-optimizationpasses 5 ## 混合时不使用大小写混合,混合后的类名为小写 #-dontusemixedcaseclassnames ## 指定不去忽略非公共库的类 #-dontskipnonpubliclibraryclasses ## 这句话能够使我们的项目混淆后产生映射文件 ## 包含有类名->混淆后类名的映射关系 #-verbose ## 指定不去忽略非公共库的类成员 #-dontskipnonpubliclibraryclassmembers ## 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。 #-dontpreverify ## 保留Annotation不混淆 #-keepattributes *Annotation*,InnerClasses ## 避免混淆泛型 #-keepattributes Signature ## 抛出异常时保留代码行号 #-keepattributes SourceFile,LineNumberTable ## 指定混淆是采用的算法,后面的参数是一个过滤器 ## 这个过滤器是谷歌推荐的算法,一般不做更改 #-optimizations !code/simplification/cast,!field/*,!class/merging/* # ##2.默认保留区 ## 保留我们使用的四大组件,自定义的Application等等这些类不被混淆 ## 因为这些子类都有可能被外部调用 #-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 * extends android.view.View #-keep public class com.android.vending.licensing.ILicensingService ## 保留support下的所有类及其内部类 #-keep class android.support.** {*;} ## 保留继承的 #-keep public class * extends android.support.v4.** #-keep public class * extends android.support.v7.** #-keep public class * extends android.support.annotation.** ## 保留R下面的资源 #-keep class **.R$* {*;} # ## 保留本地native方法不被混淆 #-keepclasseswithmembernames class * { # native ; #} ## 保留在Activity中的方法参数是view的方法, ## 这样以来我们在layout中写的onClick就不会被影响 #-keepclassmembers class * extends android.app.Activity{ # public void *(android.view.View); #} ## 保留枚举类不被混淆 #-keepclassmembers enum * { # public static **[] values(); # public static ** valueOf(java.lang.String); #} ## 保留我们自定义控件(继承自View)不被混淆 #-keep public class * extends android.view.View{ # *** get*(); # void set*(***); # public (android.content.Context); # public (android.content.Context, android.util.AttributeSet); # public (android.content.Context, android.util.AttributeSet, int); #} #-keepclasseswithmembers class * { # public (android.content.Context, android.util.AttributeSet); # public (android.content.Context, android.util.AttributeSet, int); #} # ## 保留Parcelable序列化类不被混淆 #-keep class * implements android.os.Parcelable { # public static final android.os.Parcelable$Creator *; #} ## 保留Serializable序列化的类不被混淆 #-keepclassmembers class * implements java.io.Serializable { # static final long serialVersionUID; # private static final java.io.ObjectStreamField[] serialPersistentFields; # !static !transient ; # !private ; # !private ; # private void writeObject(java.io.ObjectOutputStream); # private void readObject(java.io.ObjectInputStream); # java.lang.Object writeReplace(); # java.lang.Object readResolve(); #} ## 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆 #-keepclassmembers class * { # void *(**On*Event); #} # ##3.webview #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} #-keepclassmembers class * extends android.webkit.webViewClient { # public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap); # public boolean *(android.webkit.WebView, java.lang.String); #} #-keepclassmembers class * extends android.webkit.webViewClient { # public void *(android.webkit.webView, jav.lang.String); #} ##移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用 ##这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制 #-assumenosideeffects class android.util.Log { # public static *** v(...); # public static *** i(...); # public static *** d(...); # public static *** w(...); # public static *** e(...); #} # # ################################ ## ## 第三方jar包 ## ################################ #-keep class com.uuzuche.lib_zxing.** {*;} #-keep class cc.cloudist.acplibrary.** {*;} #-keep class com.handmark.pulltorefresh.library.** {*;} #-keep class android.arch.core.internal.** {*;} #-keep class android.arch.lifecycle.** {*;} #-keep class com.alibaba.fastjson.** {*;} #-dontwarn com.alibaba.fastjson.** #-keep class android.support.graphics.drawable.** {*;} #-keep class com.facebook.stetho.** {*;} #-keep class javax.annotation.** {*;} #-keep class com.lidroid.xutils.** {*;} #-keep class okhttp3.** {*;} #-keep class okio.** {*;} #-dontwarn okio.** #-keep class org.apache.commons.cli.** {*;} #-keep class org.junit.** {*;} #-keep class junit.** {*;} #-keep class org.hamcrest.** {*;} # #-keep class sun.misc.Unsafe {*;} #-keep class com.google.gson.** {*;} #-keep class com.google.gson.stream.** {*;} #-keep class com.android.volley.** {*;} # #-keep class butterknife.** {*;} #-dontwarn butterknife.internal.** #-keep class **$$ViewBinder { *; } # ################################ ## ## 自己的代码 ## 引用的其他Module可以直接在app的这个混淆文件里配置 ## ################################ ##实体类 #-keep class com.uas.lg_smart.bean.** {*;} ##-keep .** {*;}