zoukankan      html  css  js  c++  java
  • Android混淆配置及总结

    Android打正式的release包混淆是必备的,避免APP被反编译,使项目中隐秘的技术或信息被别人查看。

    Android studio则写在proguard-rules.pro中,当然写在proguard-android.txt中也可以。

    gradle配置

    buildTypes {   
         release {        
               buildConfigField "boolean", "LOG_DEBUG", "false" //不显示log    
               zipAlignEnabled true     //Zipalign优化   
               shrinkResources true    // 移除无用的resource文件   
               minifyEnabled true     //混淆    
               proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    
         }
    }

     经常用第三方SDK的时候会忘了顺手把混淆加进来,到了打包的时候又去找,很是麻烦,因此在这里总结一下

    -optimizationpasses 5 # 指定代码的压缩级别
    -dontusemixedcaseclassnames # 是否使用大小写混合
    -dontpreverify # 混淆时是否做预校验
    -verbose # 混淆时是否记录日志
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 混淆时所采用的算法
    -keep public class * extends android.app.Activity # 保持哪些类不被混淆
    -keep public class * extends android.app.Application # 保持哪些类不被混淆
    -keep public class * extends android.app.Service # 保持哪些类不被混淆
    -keep public class * extends android.content.BroadcastReceiver # 保持哪些类不被混淆
    -keep public class * extends android.content.ContentProvider # 保持哪些类不被混淆
    -keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆
    -keep public class * extends android.preference.Preference # 保持哪些类不被混淆
    -keep public class com.android.vending.licensing.ILicensingService # 保持哪些类不被混淆
    -keepclasseswithmembernames class * { # 保持 native 方法不被混淆 
       native <methods>;
    }
    -keepclasseswithmembers class * { # 保持自定义控件类不被混淆 
       public <init>(android.content.Context, android.util.AttributeSet);
    }
    -keepclasseswithmembers class * { # 保持自定义控件类不被混淆 
       public <init>(android.content.Context, android.util.AttributeSet, int); 
    }
    -keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆  
       public void *(android.view.View);
    }
    -keepclassmembers enum * { # 保持枚举 enum 类不被混淆  
       public static **[] values(); 
       public static ** valueOf(java.lang.String);
    }
    -keep class * implements android.os.Parcelable {#保持Parcelable不被混淆
       public static final android.os.Parcelable$Creator *;
    }
    # Explicitly preserve all serialization members. The Serializable interface
    # is only a marker interface, so it wouldn't save them.
    # 显式保留所有序列化成员。可序列化接口只是一个标记接口,因此不会保存它们。
    -keep public class * implements java.io.Serializable {*;} -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keepclassmembers class * { public
    <init> (org.json.JSONObject); } #com.demo.demo 是你的包名 -keep public class com.demo.demo.R$*{ public static final int *; }

    1. Gson  GitHub地址

    # removes such information by default, so configure it to keep all of it.
    -keepattributes Signature
    # Gson specific classes
    -keep class sun.misc.Unsafe { *; }
    -keep class com.google.gson.stream.** { *; }
    # Application classes that will be serialized/deserialized over Gson
    -keep class com.google.gson.examples.android.model.** { *; }
    -keep class com.google.gson.** { *;}
    #这句非常重要,主要是滤掉 com.demo.demo.bean包下的所有.class文件不进行混淆编译,com.demo.demo是你的包名
    -keep class com.demo.demo.bean.** {*;}

    2. Butterknife  GitHub地址

    -keep class butterknife.** { *; }
    -dontwarn butterknife.internal.**
    -keep class **$$ViewBinder { *; }
    -keepclasseswithmembernames class * {    
       @butterknife.* <fields>;
    }
    -keepclasseswithmembernames class * {    
       @butterknife.* <methods>;
    }

    3. SlidingMenu   GitHub地址

    -dontwarn com.jeremyfeinstein.slidingmenu.lib.**
    -keep class com.jeremyfeinstein.slidingmenu.lib.**{*;}

    4. ImageLoader   GitHub地址

    #Universal Image Loader
    -keep class com.nostra13.universalimageloader.** { *; }
    -keepattributes Signature

    5. ShareSDK   文档

    -keep class cn.sharesdk.**{*;}
    -keep class com.sina.**{*;}
    -keep class **.R$* {*;}
    -keep class **.R{*;}
    -dontwarn cn.sharesdk.**
    -dontwarn **.R$*
    -dontwarn com.tencent.**
    -keep class com.tencent.** {*;}

    6. Okhttp-OkGo  GitHub地址

    #okhttp
    -dontwarn okhttp3.**
    -keep class okhttp3.**{*;}
    
    #okio
    -dontwarn okio.**
    -keep class okio.**{*;}

    7. RxJava    GitHub地址

    # RX
    -dontwarn rx.**
    -keepclassmembers class rx.** { *; }
    # retrolambda
    -dontwarn java.lang.invoke.*

    8. Glide    GitHub地址

    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {   
      **[] $VALUES; 
      public *;
    }

    9. 环信SDK   文档

    -keep class com.easemob.** {*;}
    -keep class org.jivesoftware.** {*;}
    -keep class org.apache.** {*;}
    -dontwarn  com.easemob.**
    #2.0.9后的不需要加下面这个keep
    #-keep class org.xbill.DNS.** {*;}
    #另外,demo中发送表情的时候使用到反射,需要keep SmileUtils
    -keep class com.easemob.chatuidemo.utils.SmileUtils {*;}
    #注意前面的包名,如果把这个类复制到自己的项目底下,比如放在com.example.utils底下,应该这么写(实际要去掉#)
    #-keep class com.example.utils.SmileUtils {*;}
    #如果使用easeui库,需要这么写
    -keep class com.easemob.easeui.utils.EaseSmileUtils {*;}
    #2.0.9后加入语音通话功能,如需使用此功能的api,加入以下keep
    -dontwarn ch.imvs.**
    -dontwarn org.slf4j.**
    -keep class org.ice4j.** {*;}
    -keep class net.java.sip.** {*;}
    -keep class org.webrtc.voiceengine.** {*;}
    -keep class org.bitlet.** {*;}
    -keep class org.slf4j.** {*;}
    -keep class ch.imvs.** {*;}
  • 相关阅读:
    6、CC2541修改按键调节广播发送功率例程为持续发送4DB的蓝牙基站
    [nRF51822] 16、nRF51822的随机数生成器,及随机数生成器的一些知识(可以帮您补补随机数发生器的知识)
    [PCB设计] 4、BAT脚本处理AD生成的GERBER文件为生产文件
    [异常解决] 奇巧淫技——VirtualBox中的linux无显示启动,并在win7上远程控制
    [PCB设计] 3、用CAM350修改GERBER文件(删除某些部分)
    [异常解决] Make nRF51 DFU Project Appear "fatal error: uECC.h: No such file or directory"
    [异常解决] How to build a gcc toolchain for nRF51 on linux (very detailed!!!)
    [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一
    [模拟电路] 2、Passive Band Pass Filter
    Docker常用命令
  • 原文地址:https://www.cnblogs.com/steffen/p/9886141.html
Copyright © 2011-2022 走看看