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

    代码混淆规则配置文件: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中开启混淆