proguard-rules.pro 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. # Add project specific ProGuard rules here.
  2. # You can control the set of applied configuration files using the
  3. # proguardFiles setting in build.gradle.
  4. #
  5. # For more details, see
  6. # http://developer.android.com/guide/developing/tools/proguard.html
  7. # If your project uses WebView with JS, uncomment the following
  8. # and specify the fully qualified class name to the JavaScript interface
  9. # class:
  10. #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  11. # public *;
  12. #}
  13. # Uncomment this to preserve the line number information for
  14. # debugging stack traces.
  15. #-keepattributes SourceFile,LineNumberTable
  16. # If you keep the line number information, uncomment this to
  17. # hide the original source file name.
  18. #-renamesourcefileattribute SourceFile
  19. # -----------------------------基本 -----------------------------
  20. #
  21. # 指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。)
  22. -optimizationpasses 5
  23. # 混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名)
  24. -dontusemixedcaseclassnames
  25. # 指定不去忽略非公共的库类(不跳过library中的非public的类)
  26. -dontskipnonpubliclibraryclasses
  27. # 指定不去忽略包可见的库类的成员
  28. -dontskipnonpubliclibraryclassmembers
  29. #不进行优化,建议使用此选项,
  30. -dontoptimize
  31. # 不进行预校验,Android不需要,可加快混淆速度。
  32. -dontpreverify
  33. # 屏蔽警告
  34. -ignorewarnings
  35. # 指定混淆是采用的算法,后面的参数是一个过滤器
  36. # 这个过滤器是谷歌推荐的算法,一般不做更改
  37. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
  38. # 保护代码中的Annotation不被混淆
  39. -keepattributes *Annotation*
  40. # 避免混淆泛型, 这在JSON实体映射时非常重要
  41. -keepattributes Signature
  42. # 抛出异常时保留代码行号
  43. -keepattributes SourceFile,LineNumberTable
  44. #优化时允许访问并修改有修饰符的类和类的成员,这可以提高优化步骤的结果。
  45. # 比如,当内联一个公共的getter方法时,这也可能需要外地公共访问。
  46. # 虽然java二进制规范不需要这个,要不然有的虚拟机处理这些代码会有问题。当有优化和使用-repackageclasses时才适用。
  47. #指示语:不能用这个指令处理库中的代码,因为有的类和类成员没有设计成public ,而在api中可能变成public
  48. -allowaccessmodification
  49. #当有优化和使用-repackageclasses时才适用。
  50. -repackageclasses ''
  51. # 混淆时记录日志(打印混淆的详细信息)
  52. # 这句话能够使我们的项目混淆后产生映射文件
  53. # 包含有类名->混淆后类名的映射关系
  54. -verbose
  55. #
  56. ##
  57. ## ----------------------------- 默认保留 -----------------------------
  58. ##
  59. ##----------------------------------------------------
  60. ## 保持哪些类不被混淆
  61. ##继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆
  62. -keep public class * extends android.app.Activity
  63. -keep public class * extends android.app.Application
  64. -keep public class * extends android.app.Service
  65. -keep public class * extends android.content.BroadcastReceiver
  66. -keep public class * extends android.content.ContentProvider
  67. -keep public class * extends android.app.backup.BackupAgentHelper
  68. -keep public class * extends android.preference.Preference
  69. -keep public class * extends android.view.View
  70. -keep class android.support.** {*;}## 保留support下的所有类及其内部类
  71. #
  72. ##表示不混淆上面声明的类,最后这两个类我们基本也用不上,是接入Google原生的一些服务时使用的。
  73. ##----------------------------------------------------
  74. #
  75. ## 保留继承的
  76. #-keep public class * extends android.support.v4.**
  77. #-keep public class * extends android.support.v7.**
  78. #-keep public class * extends android.support.annotation.**
  79. #
  80. #
  81. ##表示不混淆任何包含native方法的类的类名以及native方法名,这个和我们刚才验证的结果是一致
  82. -keepclasseswithmembernames class ** {
  83. native <methods>;
  84. }
  85. ##这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆
  86. ##表示不混淆Activity中参数是View的方法,因为有这样一种用法,在XML中配置android:onClick=”buttonClick”属性,
  87. ##当用户点击该按钮时就会调用Activity中的buttonClick(View view)方法,如果这个方法被混淆的话就找不到了
  88. -keepclassmembers class * extends android.app.Activity{
  89. public void *(android.view.View);
  90. }
  91. #
  92. ##表示不混淆枚举中的values()和valueOf()方法,枚举我用的非常少,这个就不评论了
  93. -keepclassmembers enum * {
  94. public static **[] values();
  95. public static ** valueOf(java.lang.String);
  96. }
  97. #
  98. ##表示不混淆任何一个View中的setXxx()和getXxx()方法,
  99. ##因为属性动画需要有相应的setter和getter的方法实现,混淆了就无法工作了。
  100. -keep public class * extends android.view.View{
  101. *** get*();
  102. void set*(***);
  103. public <init>(android.content.Context);
  104. public <init>(android.content.Context, android.util.AttributeSet);
  105. public <init>(android.content.Context, android.util.AttributeSet, int);
  106. }
  107. -keepclasseswithmembers class * {
  108. public <init>(android.content.Context, android.util.AttributeSet);
  109. public <init>(android.content.Context, android.util.AttributeSet, int);
  110. }
  111. #
  112. ##表示不混淆Parcelable实现类中的CREATOR字段,
  113. ##毫无疑问,CREATOR字段是绝对不能改变的,包括大小写都不能变,不然整个Parcelable工作机制都会失败。
  114. -keep class * implements android.os.Parcelable {
  115. public static final android.os.Parcelable$Creator *;
  116. }
  117. ## 这指定了继承Serizalizable的类的如下成员不被移除混淆
  118. -keepclassmembers class * implements java.io.Serializable {
  119. static final long serialVersionUID;
  120. private static final java.io.ObjectStreamField[] serialPersistentFields;
  121. private void writeObject(java.io.ObjectOutputStream);
  122. private void readObject(java.io.ObjectInputStream);
  123. java.lang.Object writeReplace();
  124. java.lang.Object readResolve();
  125. }
  126. ## 保留R下面的资源
  127. #-keep class **.R$* {
  128. # *;
  129. #}
  130. ##不混淆资源类下static的
  131. ##-keepclassmembers class **.R$* {
  132. ## public static <fields>;
  133. ##}
  134. #
  135. ## 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆
  136. -keepclassmembers class * {
  137. void *(**On*Event);
  138. void *(**On*Listener);
  139. }
  140. #
  141. ## 保留我们自定义控件(继承自View)不被混淆
  142. -keep public class * extends android.view.View{
  143. *** get*();
  144. void set*(***);
  145. public <init>(android.content.Context);
  146. public <init>(android.content.Context, android.util.AttributeSet);
  147. public <init>(android.content.Context, android.util.AttributeSet, int);
  148. }
  149. #
  150. ##
  151. ##----------------------------- WebView(项目中没有可以忽略) -----------------------------
  152. ##
  153. ##webView需要进行特殊处理
  154. #-keepclassmembers class fqcn.of.javascript.interface.for.Webview {
  155. # public *;
  156. #}
  157. #-keepclassmembers class * extends android.webkit.WebViewClient {
  158. # public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
  159. # public boolean *(android.webkit.WebView, java.lang.String);
  160. #}
  161. #-keepclassmembers class * extends android.webkit.WebViewClient {
  162. # public void *(android.webkit.WebView, jav.lang.String);
  163. #}
  164. #在app中与HTML5的JavaScript的交互进行特殊处理
  165. #我们需要确保这些js要调用的原生方法不能够被混淆,于是我们需要做如下处理:
  166. #-keepclassmembers class com.ljd.example.JSInterface {
  167. # <methods>;
  168. #}
  169. #
  170. ##
  171. ##---------------------------------实体类---------------------------------
  172. ##--------(实体Model不能混淆,否则找不到对应的属性获取不到值)-----
  173. ##
  174. -keep class com.example.odm.garbagesorthelper.model.entity.** { *; }
  175. -dontwarn com.example.odm.garbagesorthelper.model.entity.**
  176. #对含有反射类的处理
  177. -keep class com.example.odm.garbagesorthelper.utils.** { *; }
  178. #---------------------------------EasyHttp混淆---------------------------------
  179. # OkHttp3 框架混淆规则
  180. -keepattributes Signature
  181. -keepattributes *Annotation*
  182. -keep class okhttp3.** { *; }
  183. -keep interface okhttp3.** { *; }
  184. -dontwarn okhttp3.**
  185. -dontwarn okio.**
  186. # EasyHttp 框架混淆规则
  187. -keep class com.hjq.http.** {*;}
  188. # 必须要加上此规则,否则会导致泛型解析失败
  189. -keep class * implements com.hjq.http.listener.OnHttpListener {
  190. *;
  191. }
  192. -keep class * extends com.hjq.http.model.ResponseClass {
  193. *;
  194. }
  195. #---------------------------------微信混淆---------------------------------
  196. -keep class com.tencent.mm.opensdk.** {
  197. *;
  198. }
  199. -keep class com.tencent.wxop.** {
  200. *;
  201. }
  202. -keep class com.tencent.mm.sdk.** {
  203. *;
  204. }
  205. #---------------------------------QQ混淆---------------------------------
  206. -keep class * extends android.app.Dialog
  207. #---------------------------------华为OCR混淆---------------------------------
  208. -ignorewarnings
  209. -keepattributes *Annotation*
  210. -keepattributes Exceptions
  211. -keepattributes InnerClasses
  212. -keepattributes Signature
  213. -keepattributes SourceFile,LineNumberTable
  214. -keep class com.huawei.hianalytics.**{*;}
  215. -keep class com.huawei.updatesdk.**{*;}
  216. -keep class com.huawei.hms.**{*;}
  217. # OkHttp相关
  218. -keepattributes Signature
  219. -keepattributes *Annotation*
  220. -keep class com.squareup.okhttp3.** { *; }
  221. -keep interface com.squareup.okhttp3.** { *; }
  222. -dontwarn com.squareup.okhttp3.**
  223. # Okio相关
  224. -dontwarn java.nio.file.*
  225. -dontwarn okio.**
  226. # UIL相关
  227. -keep class com.nostra13.universalimageloader.** { *; }
  228. -keepclassmembers class com.nostra13.universalimageloader.** {*;}
  229. -dontwarn com.nostra13.universalimageloader.**
  230. # Glide相关
  231. -keep class com.bumptech.glide.Glide { *; }
  232. -keep public class * implements com.bumptech.glide.module.GlideModule
  233. -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  234. **[] $VALUES;
  235. public *;
  236. }
  237. -dontwarn com.bumptech.glide.**
  238. # Picasso相关
  239. -dontwarn com.squareup.okhttp.**
  240. -dontwarn com.squareup.picasso.**
  241. # xUtils3相关
  242. -keepattributes Signature,*Annotation*
  243. -keep public class org.xutils.** {
  244. public protected *;
  245. }
  246. -keep public interface org.xutils.** {
  247. public protected *;
  248. }
  249. -keepclassmembers class * extends org.xutils.** {
  250. public protected *;
  251. }
  252. -keepclassmembers @org.xutils.db.annotation.* class * {*;}
  253. -keepclassmembers @org.xutils.http.annotation.* class * {*;}
  254. -dontwarn org.xutils.**
  255. #---------------------------------XPopup混淆---------------------------------
  256. -dontwarn com.lxj.xpopup.widget.**
  257. -keep class com.lxj.xpopup.widget.**{*;}
  258. #---------------------------------Aria---------------------------------
  259. -keep class com.arialyy.**{*;}
  260. -dontwarn com.arialyy.aria.**
  261. -keep class com.arialyy.aria.**{*;}
  262. -keep class **$$DownloadListenerProxy{ *; }
  263. -keep class **$$UploadListenerProxy{ *; }
  264. -keep class **$$DownloadGroupListenerProxy{ *; }
  265. -keep class **$$DGSubListenerProxy{ *; }
  266. -keepclasseswithmembernames class * {
  267. @Download.* <methods>;
  268. @Upload.* <methods>;
  269. @DownloadGroup.* <methods>;
  270. }
  271. #---------------------------------腾讯PAG混淆---------------------------------
  272. -keep class org.libpag.** {*;}
  273. -keep class androidx.exifinterface.** {*;}
  274. #---------------------------------Toaster混淆---------------------------------
  275. -keep class com.hjq.toast.** {*;}
  276. #---------------------------------阿里混淆---------------------------------
  277. -keepclasseswithmembernames class ** {
  278. native <methods>;
  279. }
  280. -keepattributes Signature
  281. -keep class com.taobao.** {*;}
  282. -keep class com.alibaba.** {*;}
  283. -keep class com.alipay.** {*;}
  284. -keep class com.ut.** {*;}
  285. -keep class com.ta.** {*;}
  286. -keep class anet.**{*;}
  287. -keep class anetwork.**{*;}
  288. -keep class org.android.spdy.**{*;}
  289. -keep class org.android.agoo.**{*;}
  290. -keep class android.os.**{*;}
  291. -keep class org.json.**{*;}
  292. -dontwarn com.taobao.**
  293. -dontwarn com.alibaba.**
  294. -dontwarn com.alipay.**
  295. -dontwarn anet.**
  296. -dontwarn org.android.spdy.**
  297. -dontwarn org.android.agoo.**
  298. -dontwarn anetwork.**
  299. -dontwarn com.ut.**
  300. -dontwarn com.ta.**