zoukankan      html  css  js  c++  java
  • 【转】 Android代码混淆之混淆规则

    请尊重他人的劳动成果,转载请注明出处:Android代码混淆技巧》

            因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。SDK已经集成了ProGuard工具,开发者可以从SDK目录下的 oolsproguard目录中进行查看。

            ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。它可以将类、字段和方法使用短无意义的名称进行重命名。最后,预校验的Java6或针对Java MicroEdition的所述处理后的码。

      下面就和大家分享一下对使用了第三方库的项目进行混淆的经验。

    ProGuard默认会对第三方库也进行混淆的,而第三方库有的已经混淆过了,有的使用了Java反射技术,所以我们在进行代码混淆的时候要排除这些第三方库。排除对第三方库的混淆需要在混淆规则文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中将含有混淆规则的文件名配置进去就行了)中添加如下规则:

    1.如果使用了Gson之类的工具要使JavaBean类即实体类不被混淆。

    2.如果使用了自定义控件那么要保证它们不参与混淆。

    3.如果使用了枚举要保证枚举不被混淆。

    4.对第三方库中的类不进行混淆

    a.混淆时保护引用的第三方jar包

    如:-libraryjars libs/baidumapapi_v3_2_0.jar  #保护引用的第三方jar包不被混淆

    注意:在使用Eclipse+ADT时需要加入-libraryjars libs/...,如果你是使用Android Studio开发的项目则不需要加入libs包中的jar包,这是因为,通过Android Studio进行混淆代码时,默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加,否则会出现“ java.io.IOException: The same input jar is specified twice” 错误。

    b.混淆时保护第三方jar包中的类不被混淆

    如:-keep class com.baidu.** { *; }   #让ProGuard不要警告找不到com.baidu.**这个包里面的类的相关引用

    -dontwarn com.baidu.**  #保持com.baidu.**这个包里面的所有类和所有方法不被混淆。

    附:小编开发中用到的一些混淆规则,大家可以根据需要复制到自己的项目中的混淆规则的文件中即可。

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. ################common###############  
    2. -keep class com.jph.android.entity.** { *; } #实体类不参与混淆  
    3. -keep class com.jph.android.view.** { *; } #自定义控件不参与混淆  
    4.   
    5. ################baidu map###############  
    6. -libraryjars libs/baidumapapi_v3_2_0.jar  
    7. -libraryjars libs/locSDK_5.0.jar  
    8. -keep class com.baidu.** { *; }  
    9. -keep class vi.com.gdi.bgl.android.**{*;}  
    10. -dontwarn com.baidu.**  
    11.   
    12.   
    13. ################afinal##################  
    14. #-libraryjars libs/afinal_0.5_bin.jar  
    15. #-keep class net.tsz.afinal.** { *; }   
    16. #-keep public class * extends net.tsz.afinal.**    
    17. #-keep public interface net.tsz.afinal.** {*;}  
    18. #-dontwarn net.tsz.afinal.**  
    19.   
    20. ################xutils##################  
    21. -libraryjars libs/xUtils-2.6.14.jar  
    22. -keep class com.lidroid.xutils.** { *; }   
    23. -keep public class * extends com.lidroid.xutils.**    
    24. -keepattributes Signature  
    25. -keepattributes *Annotation*  
    26. -keep public interface com.lidroid.xutils.** {*;}  
    27. -dontwarn com.lidroid.xutils.**  
    28. -keepclasseswithmembers class com.jph.android.entity.** {  
    29.     <fields>;  
    30.     <methods>;  
    31. }  
    32.   
    33. ################支付宝##################  
    34. -libraryjars libs/alipaysecsdk.jar  
    35. -libraryjars libs/alipayutdid.jar  
    36. -libraryjars libs/alipaysdk.jar  
    37. -keep class com.alipay.android.app.IAliPay{*;}  
    38. -keep class com.alipay.android.app.IAlixPay{*;}  
    39. -keep class com.alipay.android.app.IRemoteServiceCallback{*;}  
    40. -keep class com.alipay.android.app.lib.ResourceMap{*;}  
    41.   
    42. ################gson##################  
    43. -libraryjars libs/gson-2.2.4.jar  
    44. -keep class com.google.gson.** {*;}  
    45. #-keep class com.google.**{*;}  
    46. -keep class sun.misc.Unsafe { *; }  
    47. -keep class com.google.gson.stream.** { *; }  
    48. -keep class com.google.gson.examples.android.model.** { *; }   
    49. -keep class com.google.** {  
    50.     <fields>;  
    51.     <methods>;  
    52. }  
    53. -keepclassmembers class * implements java.io.Serializable {  
    54.     static final long serialVersionUID;  
    55.     private static final java.io.ObjectStreamField[] serialPersistentFields;  
    56.     private void writeObject(java.io.ObjectOutputStream);  
    57.     private void readObject(java.io.ObjectInputStream);  
    58.     java.lang.Object writeReplace();  
    59.     java.lang.Object readResolve();  
    60. }  
    61. -dontwarn com.google.gson.**  
    62.   
    63.   
    64.   
    65. ################httpmime/httpcore##########  
    66. -libraryjars libs/httpcore-4.3.2.jar  
    67. -libraryjars libs/httpmime-4.3.5.jar  
    68. -keep class org.apache.http.** {*;}  
    69. -dontwarn org.apache.http.**  
    70.   
    71. ####################jpush##################  
    72. -libraryjars libs/jpush-sdk-release1.7.1.jar  
    73. -keep class cn.jpush.** { *; }  
    74. -keep public class com.umeng.fb.ui.ThreadView { } #双向反馈功能代码不混淆  
    75. -dontwarn cn.jpush.**  
    76. -keepclassmembers class * {  
    77.     public <init>(org.json.JSONObject);  
    78. }  
    79.  #不混淆R类  
    80. -keep public class com.jph.android.R$*{   
    81.     public static final int *;  
    82. }  
    83. -keepclassmembers enum * {  
    84.     public static **[] values();  
    85.     public static ** valueOf(java.lang.String);  
    86. }  
    87.   
    88. ####################umeng##################  
    89. -libraryjars libs/umeng-analytics-v5.2.4.jar  
    90. -keep class com.umeng.analytics.** {*;}  
    91. -dontwarn com.umeng.analytics.**  
    92.   
    93. #-keep public class * extends com.umeng.**    
    94. #-keep public class * extends com.umeng.analytics.**    
    95. #-keep public class * extends com.umeng.common.**    
    96. #-keep public class * extends com.umeng.newxp.**   
    97. -keep class com.umeng.** { *; }    
    98. -keep class com.umeng.analytics.** { *; }    
    99. -keep class com.umeng.common.** { *; }    
    100. -keep class com.umeng.newxp.** { *; }   
    101.   
    102. -keepclassmembers class * {  
    103.    public <init>(org.json.JSONObject);  
    104. }  
    105. -keep class com.umeng.**  
    106.   
    107. -keep public class com.idea.fifaalarmclock.app.R$*{  
    108.     public static final int *;  
    109. }  
    110.   
    111. -keep public class com.umeng.fb.ui.ThreadView {  
    112. }  
    113.   
    114. -dontwarn com.umeng.**  
    115.   
    116. -dontwarn org.apache.commons.**  
    117.   
    118. -keep public class * extends com.umeng.**  
    119.   
    120. -keep class com.umeng.** {*; }  
    121.   
    122. ####################universal-image-loader########  
    123. -libraryjars libs/universal-image-loader-1.9.3.jar  
    124. -keep class com.nostra13.universalimageloader.** {*;}  
    125. -dontwarn com.nostra13.universalimageloader.**  
    126.   
    127.   
    128. ####################zxing#####################  
    129. -libraryjars libs/zxing.jar  
    130. -libraryjars libs/zxing_apply.jar  
    131. -keep class com.google.zxing.** {*;}  
    132. -dontwarn com.google.zxing.**  
    133.   
    134. ####################BASE64Decoder##################  
    135. -libraryjars libs/sun.misc.BASE64Decoder.jar  
    136.   
    137. ####################support.v4#####################  
    138. -libraryjars libs/android-support-v4.jar  
    139. -keep class android.support.v4.** { *; }  
    140. -dontwarn android.support.v4.**  
    141.   
    142. ###################other####################  
    143. # slidingmenu 的混淆  
    144. -dontwarn com.jeremyfeinstein.slidingmenu.lib.**  
    145. -keep class com.jeremyfeinstein.slidingmenu.lib.** { *; }  
    146. # ActionBarSherlock混淆  
    147. -dontwarn com.actionbarsherlock.**  
    148. -keep class com.actionbarsherlock.** { *; }  
    149. -keep interface com.actionbarsherlock.** { *; }  
    150. -keep class * extends java.lang.annotation.Annotation { *; }  
    151. -keepclasseswithmembernames class * {  
    152.     native <methods>;  
    153. }  
    154.   
    155. -keep class com.jph.android.entity.** {  
    156.     <fields>;  
    157.     <methods>;  
    158. }  
    159.   
    160. -dontwarn android.support.**  
    161. -dontwarn com.slidingmenu.lib.app.SlidingMapActivity  
    162. -keep class android.support.** { *; }  
    163. -keep class com.actionbarsherlock.** { *; }  
    164. -keep interface com.actionbarsherlock.** { *; }  
    165. -keep class com.slidingmenu.** { *; }  
    166. -keep interface com.slidingmenu.** { *; }  

    推荐阅读:《Android开发之反编译与防止反编译

    Android代码混淆指南 

  • 相关阅读:
    线程池的状态整理
    线程池 ThreadPoolExecutor 源码整理
    ReentrantReadWriteLock 源码分析
    ReentrantLock 锁释放源码分析
    编译Hadoop源码
    Ubuntu安装secureCRT
    ubuntu中为hive配置远程MYSQL database
    解决Ubuntu下sublime3无法输入中文
    Ubuntu下安装PAC Manager
    Git起步--git安装与初次运行git前配置
  • 原文地址:https://www.cnblogs.com/syjhsgcc/p/4771831.html
Copyright © 2011-2022 走看看