1. 程式人生 > >Android 混淆通用Proguard.cfg

Android 混淆通用Proguard.cfg

# 程式碼混淆壓縮比,在0~7之間,預設為5,一般不下需要修改
-optimizationpasses 5

# 混淆時不使用大小寫混合,混淆後的類名為小寫
# windows下的同學還是加入這個選項吧(windows大小寫不敏感)
-dontusemixedcaseclassnames

# 指定不去忽略非公共的庫的類
# 預設跳過,有些情況下編寫的程式碼與類庫中的類在同一個包下,並且持有包中內容的引用,此時就需要加入此條宣告
# 對於 Proguard 4.5版本這個設定是預設的
-dontskipnonpubliclibraryclasses

# 指定不去忽略非公共的庫的類的成員
-dontskipnonpubliclibraryclassmembers
# 不做預檢驗,preverify是proguard的四個步驟之一 # Android不需要preverify,去掉這一步可以加快混淆速度 -dontpreverify # 有了verbose這句話,混淆後就會生成對映檔案 # 包含有類名->混淆後類名的對映關係 # 然後使用printmapping指定對映檔案的名稱 -verbose -printmapping priguardMapping.txt # 指定混淆時採用的演算法,後面的引數是一個過濾器 # 這個過濾器是谷歌推薦的演算法,一般不改變 -optimizations !code/simplification/artithmetic,!field/*,!class
/merging/*
# 保護程式碼中的Annotation不被混淆 # 這在JSON實體對映時非常重要,比如fastJson -keepattributes *Annotation* # 避免混淆泛型 # 這在JSON實體對映時非常重要,比如fastJson -keepattributes Signature # 丟擲異常時保留程式碼行號 -keepattributes SourceFile,LineNumberTable # 保留所有的本地native方法不被混淆 -keepclasseswithmembernames class * { native <methods>; } # 保留了繼承自Activity、Application這些類的子類 # 因為這些子類有可能被外部呼叫 # 比如第一行就保證了所有Activity的子類不要被混淆 -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 # 如果有引用android-support-v4.jar包,可以新增下面這行 # -keep public class com.null.test.ui.fragment.** {*;} # 保留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 { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(***); *** get* (); } # 保留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 <fields>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } # 對R檔案下的所有類及其方法,都不能被混淆 -keepclassmembers class **.R$* { *; } # 對於帶有回撥函式onXXEvent的,不能混淆 -keepclassmembers class * { void *(**On*Event); } #對第三方jar包處理 -libraryjars libs/android-support-v4.jar -dontwarn android.support.v4.** -libraryjars libs/androidsvg-1.2.0.jar -dontwarn com.caverock.** -libraryjars libs/fastjson-1.2.2.jar -dontwarn com.alibaba.fastjson.**
對於android-support-v4.jar
 1.-libraryjars libs/android-support-v4.jar 
 2.-dontwarn android.support.v4.** 
 3.-keep class android.support.v4.** { *; } 
 4.-keep public class * extends android.support.v4.** 
 5.-keep public class * extends android.app.Fragment