proguard.cfg 配置说明(转)

发布日期:2012-11-18 11:08:45
 
001 # -------------------------------------
002 # android 原始混淆模板
003 # -------------------------------------
004   
005 # ----------------------------------
006 #  通过指定数量的优化能执行
007 #  -optimizationpasses n
008 # ----------------------------------
009 -optimizationpasses 5
010   
011 # ----------------------------------
012 #   混淆时不会产生形形色色的类名 
013 #   -dontusemixedcaseclassnames
014 # ----------------------------------
015 #-dontusemixedcaseclassnames
016 # ----------------------------------
017 #      指定不去忽略非公共的库类
018 #  -dontskipnonpubliclibraryclasses
019 # ----------------------------------
020 #-dontskipnonpubliclibraryclasses
021   
022 # ----------------------------------
023 #       不预校验
024 #    -dontpreverify
025 # ----------------------------------
026 # -dontpreverify
027   
028 # ----------------------------------
029 #      输出生成信息
030 #       -verbose
031 # ----------------------------------
032 -verbose
033   
034 # ----------------------------------
035 #        优化选项
036 #   optimizations  {optimization_filter} 
037 # ----------------------------------
038 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
039   
040 -keep public class * extends android.app.Activity
041 -keep public class * extends android.app.Application
042 -keep public class * extends android.app.Service
043 -keep public class * extends android.content.BroadcastReceiver
044 -keep public class * extends android.content.ContentProvider
045 -keep public class * extends android.app.backup.BackupAgentHelper
046 -keep public class * extends android.preference.Preference
047 -keep public class com.android.vending.licensing.ILicensingService
048   
049 -keepclasseswithmembernames class * {
050     native;
051 }
052 # -----------------
053 # modify 修改合并
054 # -----------------
055 -keep public class * extends android.view.View {
056     public(android.content.Context);
057     public(android.content.Context, android.util.AttributeSet);
058     public(android.content.Context, android.util.AttributeSet, int);
059     public void set*(...);
060 }
061   
062 -keepclassmembers enum * {
063     public static **[] values();
064     public static ** valueOf(java.lang.String);
065 }
066   
067 -keep class * implements android.os.Parcelable {
068   public static final android.os.Parcelable$Creator *;
069 }
070   
071 #--------------------------
072 # 保护类型   -keepattributes 说明
073 # Exceptions, Signature, Deprecated, SourceFile, SourceDir, LineNumberTable, LocalVariableTable, 
074 # LocalVariableTypeTable, Synthetic, EnclosingMethod, RuntimeVisibleAnnotations, RuntimeInvisibleAnnotations, 
075 # RuntimeVisibleParameterAnnotations, RuntimeInvisibleParameterAnnotations, and AnnotationDefault
076 # --------------------
077 -keepattributes **
078 -libraryjars /lib/rt.jar
079   
080 # ----------------------
081 #  不压缩指定的文件
082 #  -dontshrink
083 # ----------------------
084 -dontshrink
085   
086 # ----------------------
087 #  不优化指定的文件
088 #  -dontoptimize
089 # -----------------------
090 -dontoptimize
091   
092 # -----------------------
093 #  不混淆指定的文件
094 #  -dontobfuscate
095 # -----------------------
096   
097 # ----- 混淆包路径 -------
098 -repackageclasses ''
099 -flattenpackagehierarchy ''
100 -target 1.6
101   
102 # -------- 以下是使用了 roboguice-1.1.2.jar 以及 guice-2.0-no_app.jar 功能需要保护的字段及类相关 --------
103 -keep class com.google.inject.Binder
104 -keepclassmembers class * {
105     @com.google.inject.Inject(...);
106 }
107 -keepclassmembers class * {
108     void *(**On*Event); 
109 }
110 -keepclassmembers class **.R$* {
111     public static;
112 }
113   
114 # ------ 编译时需要用到的 jar 包
115 -libraryjars D:/dev_rc/android-sdk-windows/add-ons/addon_google_apis_google_inc_11/libs/maps.jar
116   
117 # ------ 保护 谷歌第三方 jar 包,界面特效 ----------
118 -keep class android.support.v4.**
119 -dontwarn android.support.v4.**
120   
121 # ------ 保护百度地址jar包 --------
122 -keep class com.baidu.mapapi.** { *; }
123 -dontwarn com.baidu.mapapi.**
124   
125 # --- 打包时忽略以下类的警告 --
126 -dontwarn com.classpackage.AA
127   
128 #-keepnames class * implements java.io.Serializable
129 # ---------保护所有实体中的字段名称----------
130 -keepclassmembers class * implements java.io.Serializable {
131     ;
132 }
133   
134 # --------- 保护类中的所有方法名 ------------
135 -keepclassmembers class * {
136     public;
137 }

 

总结:

无非就是要保护一些反射实现的逻辑,还有如果调用到外部接口(如hessian实现的)时方法名需要保护。