14
14
# class:
15
15
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16
16
# public *;
17
- #}
17
+ #}
18
+
19
+ #############################################
20
+ #
21
+ # 对于一些基本指令的添加
22
+ #
23
+ #############################################
24
+ # 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
25
+ -optimizationpasses 5
26
+
27
+ # 混合时不使用大小写混合,混合后的类名为小写
28
+ -dontusemixedcaseclassnames
29
+
30
+ # 指定不去忽略非公共库的类
31
+ -dontskipnonpubliclibraryclasses
32
+
33
+ # 这句话能够使我们的项目混淆后产生映射文件
34
+ # 包含有类名->混淆后类名的映射关系
35
+ -verbose
36
+
37
+ # 指定不去忽略非公共库的类成员
38
+ -dontskipnonpubliclibraryclassmembers
39
+
40
+ # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
41
+ -dontpreverify
42
+
43
+ # 保留Annotation不混淆
44
+ -keepattributes *Annotation*,InnerClasses
45
+
46
+ # 避免混淆泛型
47
+ -keepattributes Signature
48
+
49
+ # 抛出异常时保留代码行号
50
+ -keepattributes SourceFile,LineNumberTable
51
+
52
+ # 指定混淆是采用的算法,后面的参数是一个过滤器
53
+ # 这个过滤器是谷歌推荐的算法,一般不做更改
54
+ -optimizations !code/simplification/cast,!field/*,!class/merging/*
55
+
56
+
57
+ #############################################
58
+ #
59
+ # Android开发中一些需要保留的公共部分
60
+ #
61
+ #############################################
62
+
63
+ # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆
64
+ # 因为这些子类都有可能被外部调用
65
+ -keep public class * extends android.app.Activity
66
+ -keep public class * extends android.app.Appliction
67
+ -keep public class * extends android.app.Service
68
+ -keep public class * extends android.content.BroadcastReceiver
69
+ -keep public class * extends android.content.ContentProvider
70
+ -keep public class * extends android.app.backup.BackupAgentHelper
71
+ -keep public class * extends android.preference.Preference
72
+ -keep public class * extends android.view.View
73
+ -keep public class com.android.vending.licensing.ILicensingService
74
+
75
+
76
+ # 保留support下的所有类及其内部类
77
+ -keep class android.support.** {*;}
78
+
79
+ # 保留继承的
80
+ -keep public class * extends android.support.v4.**
81
+ -keep public class * extends android.support.v7.**
82
+ -keep public class * extends android.support.annotation.**
83
+
84
+ # 保留R下面的资源
85
+ -keep class **.R$* {*;}
86
+
87
+ # 保留本地native方法不被混淆
88
+ -keepclasseswithmembernames class * {
89
+ native <methods>;
90
+ }
91
+
92
+ # 保留在Activity中的方法参数是view的方法,
93
+ # 这样以来我们在layout中写的onClick就不会被影响
94
+ -keepclassmembers class * extends android.app.Activity{
95
+ public void *(android.view.View);
96
+ }
97
+
98
+ # 保留枚举类不被混淆
99
+ -keepclassmembers enum * {
100
+ public static **[] values();
101
+ public static ** valueOf(java.lang.String);
102
+ }
103
+
104
+ # 保留我们自定义控件(继承自View)不被混淆
105
+ -keep public class * extends android.view.View{
106
+ *** get*();
107
+ void set*(***);
108
+ public <init>(android.content.Context);
109
+ public <init>(android.content.Context, android.util.AttributeSet);
110
+ public <init>(android.content.Context, android.util.AttributeSet, int);
111
+ }
112
+
113
+ # 保留Parcelable序列化类不被混淆
114
+ -keep class * implements android.os.Parcelable {
115
+ public static final android.os.Parcelable$Creator *;
116
+ }
117
+
118
+ # 保留Serializable序列化的类不被混淆
119
+ -keepnames class * implements java.io.Serializable
120
+ -keepclassmembers class * implements java.io.Serializable {
121
+ static final long serialVersionUID;
122
+ private static final java.io.ObjectStreamField[] serialPersistentFields;
123
+ !static !transient <fields>;
124
+ !private <fields>;
125
+ !private <methods>;
126
+ private void writeObject(java.io.ObjectOutputStream);
127
+ private void readObject(java.io.ObjectInputStream);
128
+ java.lang.Object writeReplace();
129
+ java.lang.Object readResolve();
130
+ }
131
+
132
+ # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
133
+ -keepclassmembers class * {
134
+ void *(**On*Event);
135
+ void *(**On*Listener);
136
+ }
137
+
138
+ # webView处理,项目中没有使用到webView忽略即可
139
+ -keepclassmembers class fqcn.of.javascript.interface.for.webview {
140
+ public *;
141
+ }
142
+ -keepclassmembers class * extends android.webkit.webViewClient {
143
+ public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
144
+ public boolean *(android.webkit.WebView, java.lang.String);
145
+ }
146
+ -keepclassmembers class * extends android.webkit.webViewClient {
147
+ public void *(android.webkit.webView, jav.lang.String);
148
+ }
149
+
150
+ # 移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用
151
+ # 记得proguard-android.txt中一定不要加-dontoptimize才起作用
152
+ # 另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
153
+ #-assumenosideeffects class android.util.Log {
154
+ # public static int v(...);
155
+ # public static int i(...);
156
+ # public static int w(...);
157
+ # public static int d(...);
158
+ # public static int e(...);
159
+ #}
160
+
161
+ #############################################
162
+ #
163
+ # 项目中特殊处理部分
164
+ #
165
+ #############################################
166
+
167
+ #-----------处理反射类---------------
168
+
169
+
170
+
171
+ #-----------处理js交互---------------
172
+
173
+
174
+
175
+ #-----------处理实体类---------------
176
+ # 在开发的时候我们可以将所有的实体类放在一个包内,这样我们写一次混淆就行了。
177
+ #-keep class com.blankj.data.bean.**{ *; }
178
+
179
+ # 或者对实体类都加 @Keep 即可
180
+ # @Keep
181
+ -keep,allowobfuscation @interface android.support.annotation.Keep
182
+ -keep @android.support.annotation.Keep class *
183
+ -keepclassmembers class * {
184
+ @android.support.annotation.Keep *;
185
+ }
186
+
187
+
188
+ #-----------处理第三方依赖库---------
0 commit comments