代码混淆规则配置文件:proguard-rules.pro

如果我们想在打包的时候进行代码混淆,就需要在proguard-rules.pro中配置代码混淆规则.

常用的代码混淆规则:

  1. # 在这里添加项目的代码混淆规则
  2. # 混淆规则请参考:http://proguard.sourceforge.net/index.html#manual/usage.html
  3. ##################### 一般使用默认 #####################
  4. # 不使用大小写混合类名,混淆后的类名为小写
  5. -dontusemixedcaseclassnames
  6. # 混淆第三方库
  7. -dontskipnonpubliclibraryclasses
  8. # 混淆时记录日志,有助于排查错误
  9. -verbose
  10. # 代码混淆使用的算法.
  11. -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
  12. # 代码混淆压缩比,值在0-7之间,默认为5.
  13. -optimizationpasses 5
  14. # 优化时允许访问并修改有修饰符的类和类的成员
  15. -allowaccessmodification
  16. ##################### 不混淆 #####################
  17. # 这些类不混淆
  18. -keep public class * extends android.app.Activity
  19. -keep public class * extends android.app.Application
  20. -keep public class * extends android.app.Service
  21. -keep public class * extends android.content.BroadcastReceiver
  22. -keep public class * extends android.content.ContentProvider
  23. -keep public class * extends android.app.backup.BackupAgent
  24. -keep public class * extends android.preference.Preference
  25. -keep public class * extends android.support.v4.app.Fragment
  26. -keep public class * extends android.support.v4.app.DialogFragment
  27. -keep public class * extends com.actionbarsherlock.app.SherlockListFragment
  28. -keep public class * extends com.actionbarsherlock.app.SherlockFragment
  29. -keep public class * extends com.actionbarsherlock.app.SherlockFragmentActivity
  30. -keep public class * extends android.app.Fragment
  31. -keep public class com.android.vending.licensing.ILicensingService
  32. # Native方法不混淆
  33. -keepclasseswithmembernames class * {
  34. native <methods>;
  35. }
  36. # 自定义组件不混淆
  37. -keep public class * extends android.view.View {
  38. public <init>(android.content.Context);
  39. public <init>(android.content.Context, android.util.AttributeSet);
  40. public <init>(android.content.Context, android.util.AttributeSet, int);
  41. public void set*(...);
  42. }
  43. # 自定义控件类和类的成员不混淆(所有指定的类和类成员是要存在)
  44. -keepclasseswithmembers class * {
  45. public <init>(android.content.Context, android.util.AttributeSet);
  46. }
  47. # 同上
  48. -keepclasseswithmembers class * {
  49. public <init>(android.content.Context, android.util.AttributeSet, int);
  50. }
  51. # 自定义控件类不混淆
  52. -keepclassmembers class * extends android.app.Activity {
  53. public void *(android.view.View);
  54. }
  55. # 枚举类不被混淆
  56. -keepclassmembers enum * {
  57. public static **[] values();
  58. public static ** valueOf(java.lang.String);
  59. }
  60. # android.os.Parcelable的子类不混淆
  61. -keep class * implements android.os.Parcelable {
  62. public static final android.os.Parcelable$Creator *;
  63. }
  64. # 资源类不混淆
  65. -keepclassmembers class **.R$* {
  66. public static <fields>;
  67. }
  68. ##################### 第三方库不混淆 #####################
  69. # 保留第三方库android.support.v4不被混淆
  70. -keep class android.support.v4.app.** { *; }
  71. -keep interface android.support.v4.app.** { *; }
  72. # 打包时忽略警告
  73. -dontwarn android.support.**
  74. # 如果你的项目中使用了第三方库,需要参考官方文档的说明来进行混淆配置
  75. # 例如: 百度地图的配置 参考:http://developer.baidu.com/map/sdkandev-question.htm
  76. #-keep class com.baidu.** { *; }
  77. #-keep class vi.com.gdi.bgl.android.**{*;}
  78. # 例如: 支付宝的混淆 参考: https://doc.open.alipay.com/doc2/detail.htm?treeId=59&articleId=103683&docType=1
  79. #-libraryjars libs/alipaySDK-20150602.jar
  80. #
  81. #-keep class com.alipay.android.app.IAlixPay{*;}
  82. #-keep class com.alipay.android.app.IAlixPay$Stub{*;}
  83. #-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
  84. #-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
  85. #-keep class com.alipay.sdk.app.PayTask{ public *;}
  86. #-keep class com.alipay.sdk.app.AuthTask{ public *;}

混淆规则配置文件配置好以后,需要在build.gradle中开启混淆