Android代碼混淆之混淆規則

Android代碼混淆技巧》

        因爲Android是使用Java開發的,所以開發者可以使用ProGuard對代碼進行混淆。SDK已經集成了ProGuard工具,開發者可以從SDK目錄下的\tools\proguard目錄中進行查看。

        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 plain copy


  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.** { *; }  

發佈了41 篇原創文章 · 獲贊 37 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章