android studio 代码混淆

来源:互联网 发布:淘宝详情页面模板 编辑:程序博客网 时间:2024/05/02 00:50

android studio 代码混淆             

  google在14年底发布了首款AndroidStudio1.0正式版,我们终于可以摆脱Eclipse的卡顿,进而体验Studio的快感,之前有用过Studio的朋友都应该知道,之前的Studio用起来还是不是很爽,但是1.0正式版解决了之前版本的足,很容易上手,比Eclipse的代码混淆,android Studio 的代码混淆太爽了,几乎没有太多需要我们去写的混淆配置文件,我们先来看一下Eclipse的混淆文件

[plain] view plaincopy
  1. # To enable ProGuard in your project, edit project.properties  
  2. # to define the proguard.config property as described in that file.  
  3. #  
  4. # Add project specific ProGuard rules here.  
  5. # By default, the flags in this file are appended to flags specified  
  6. # in ${sdk.dir}/tools/proguard/proguard-android.txt  
  7. # You can edit the include path and order by changing the ProGuard  
  8. # include property in project.properties.  
  9. #  
  10. # For more details, see  
  11. #   http://developer.android.com/guide/developing/tools/proguard.html  
  12.   
  13. # Add any project specific keep options here:  
  14.   
  15. # If your project uses WebView with JS, uncomment the following  
  16. # and specify the fully qualified class name to the JavaScript interface  
  17. # class:  
  18. #-keepclassmembers class fqcn.of.javascript.interface.for.webview {  
  19. #   public *;  
  20. #}  
  21. ##########################混淆配置文件开始##################################  
  22. -optimizationpasses 5  
  23. -dontusemixedcaseclassnames  
  24. -dontskipnonpubliclibraryclasses  
  25. -dontoptimize  
  26. -verbose  
  27. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  28.   
  29. -dontwarn  
  30. -dontskipnonpubliclibraryclassmembers  
  31.   
  32. -libraryjars ../WeSchool-api/libs/android-support-v4.jar  
  33. -libraryjars ../WeSchool-api/libs/android-support-v7-recyclerview.jar  
  34. -libraryjars ../WeSchool-api/libs/fastjson-1.1.42.android.jar  
  35. -libraryjars ../WeSchool-api/libs/nineoldandroids-2.4.0.jar  
  36. -libraryjars ../WeSchool-api/libs/umeng-analytics-v5.2.4.jar  
  37. -libraryjars ../WeSchool-api/libs/universal-image-loader-1.9.3.jar  
  38. -libraryjars libs/bean.jar  
  39.   
  40. # 保持哪些类不被混淆  
  41. -keep class android.** {*; }  
  42. -keep public class * extends android.view    
  43. -keep public class * extends android.app.Activity                               
  44. -keep public class * extends android.app.Application                              
  45. -keep public class * extends android.app.Service   
  46. -keep public class * extends android.content.pm                                  
  47. -keep public class * extends android.content.BroadcastReceiver                  
  48. -keep public class * extends android.content.ContentProvider                    
  49. -keep public class * extends android.app.backup.BackupAgentHelper                
  50. -keep public class * extends android.preference.Preference                     
  51. -keep public class com.android.vending.licensing.ILicensingService   
  52.   
  53.   
  54. -keep class com.bank.pingan.model.** { *; }  
  55.   
  56. -dontwarn com.android.volley.**  
  57. -keep class com.android.volley.** {*;}  
  58.   
  59. -dontwarn com.why.photoaibum.**  
  60. -keep class com.why.photoaibum.** {*;}  
  61.   
  62. -dontwarn com.nineoldandroids.**  
  63. -keep class com.nineoldandroids.** {*;}  
  64.   
  65. -dontwarn android.support.v7.widget.**  
  66. -keep class android.support.v7.widget.** {*;}  
  67.   
  68. -dontwarn android.support.v4.**  
  69. -keep class android.support.v4.** {*;}  
  70.   
  71. -dontwarn com.nostra13.universalimageloader.**  
  72. -keep class com.nostra13.universalimageloader.** {*;}  
  73.   
  74. -dontwarn com.umeng.analytics.**  
  75. -keep class com.umeng.analytics.** {*;}  
  76.   
  77. -dontwarn u.aly.**  
  78. -keep class u.aly.** {*;}  
  79.   
  80. -dontwarn com.alibaba.fastjson.**  
  81. -keep class com.alibaba.fastjson.** {*;}  
  82.   
  83. #ACRA specifics  
  84. # we need line numbers in our stack traces otherwise they are pretty useless  
  85. -renamesourcefileattribute SourceFile  
  86. -keepattributes SourceFile,LineNumberTable  
  87.   
  88. # ACRA needs "annotations" so add this...   
  89. -keepattributes *Annotation*  
  90.   
  91. -keep class org.apache.commons.lang.**{*;}  
  92.   
  93. # 保持 native 方法不被混淆  
  94. -keepclasseswithmembernames class * {                                          
  95.     native <methods>;  
  96. }  
  97.   
  98. # 保持自定义控件类不被混淆  
  99. -keepclasseswithmembers class * {                                                 
  100.     public <init>(android.content.Context, android.util.AttributeSet);  
  101. }  
  102. -keepclasseswithmembers class * {  
  103.     public <init>(android.content.Context, android.util.AttributeSet, int);       
  104. }  
  105.   
  106. -keepclasseswithmembers class * {  
  107.     void onClick*(...);  
  108. }  
  109. -keepclasseswithmembers class * {  
  110.     *** *Callback(...);  
  111. }  
  112.   
  113. # keep setters in Views so that animations can still work.  
  114. # see http://proguard.sourceforge.net/manual/examples.html#beans  
  115. -keepclassmembers public class * extends android.view.View {  
  116.    void set*(***);  
  117.    *** get*();  
  118. }  
  119.   
  120. # 保持自定义控件类不被混淆  
  121. -keepclassmembers class * extends android.app.Activity {                         
  122.    public void *(android.view.View);  
  123. }  
  124.   
  125.   
  126. # 保持 Parcelable 不被混淆  
  127. -keep class * implements android.os.Parcelable {                               
  128.   public static final android.os.Parcelable$Creator *;  
  129. }  
  130.   
  131. -keepclassmembers class **.R$* {  
  132.     public static <fields>;  
  133. }  
  134.   
  135. # fastjson  
  136. -keep class com.alibaba.fastjson.**{*;}  
  137. # keep 所有的 javabean  
  138. -keep class com.goldnet.mobile.entity.**{*;}     
  139. # keep 泛型  
  140. -keepattributes Signature  
  141.     
  142. -keep public class * implements java.io.Serializable {    
  143.     public *;    
  144. }    
  145.     
  146. -keepclassmembers class * implements java.io.Serializable {    
  147.     static final long serialVersionUID;    
  148.     private static final java.io.ObjectStreamField[] serialPersistentFields;    
  149.     private void writeObject(java.io.ObjectOutputStream);    
  150.     private void readObject(java.io.ObjectInputStream);    
  151.     java.lang.Object writeReplace();    
  152.     java.lang.Object readResolve();    
  153. }   
  154.   
  155. <p>##########################混淆配置文件结束##################################</p>  


我们再来看下Studio 的混淆

第1步,我们将模式改为打包发布模式 点击build Variants(在studio的左下角方向)

<img src="http://img.blog.csdn.net/20150116093306814?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=" """ />

第2步 修改模式 修改为 release

<img src="http://img.blog.csdn.net/20150116093332921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093332921?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" />             </pre><p><img src="http://img.blog.csdn.net/20150116093444844?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093444844?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093444844?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" />" /></p><pre name="code" class="plain">

第3步 检查那个jar包需要进行混淆排除,我们来看一下libs里面的jar ,展开jar,我们

明显可以看出已经混淆了的jar,然后进行混淆排除,其他的就不要管了直接默认混

<img src="http://img.blog.csdn.net/20150116093533859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093533859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" />

第4步 我们来到studio的混淆文件里面进行混淆相应的排除,打开此文件进行配置

[plain] view plaincopy
  1.   

<img src="http://img.blog.csdn.net/20150116093604593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093604593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093604593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" />" /></p><pre name="code" class="plain">


打开之后可以看到和Eclipse的非常相似,不过这次我们只需要排除不需要混淆的,我的项目是需要排除友盟的SDK,如下图


<img src="http://img.blog.csdn.net/20150116093721016?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093721016?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" />


是的,就只需要这样就可以了,是不是很简单呢,不过我的项目里面使用了fastjson 所有的常量类都需要排除,由于我的常量类都实现了序列化所以我需要这样给排除一下


</span></h1><pre name="code" class="plain"><img src="http://img.blog.csdn.net/20150116093747453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093747453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" /><span style="color:#ff0000;"> </span>


如果有需要可以配置以下参数


<img src="http://img.blog.csdn.net/20150116105448046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />



第5步 好了这次大工告成,配置的混淆文件OK了,接下来就可以开启混淆配置的属性


<img src="http://img.blog.csdn.net/20150116093012109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116093012109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" />



<img src="http://img.blog.csdn.net/20150116092859765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="<img src="http://img.blog.csdn.net/20150116092859765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />" />


最后,我们需要签名模式打包,设置签名点击下一步就Ok了


<img src="http://img.blog.csdn.net/20150116092753674?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDIwNTY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />


0 0
原创粉丝点击