Android 混淆,献给菜鸟

来源:互联网 发布:解析淘宝口令api 编辑:程序博客网 时间:2024/05/29 17:25

一  混淆的目的 ,避免项目被反编译。

二  混淆的步骤(本文只针对Android studio)

      1   在model目录的build.build文件中 android 节点下

         

buildTypes {    debug {        buildConfigField "boolean", "IS_TEST", "true"    }    release {        //代码混淆        minifyEnabled true        //zipalign优化        zipAlignEnabled true        //自定义字段【true:测试地址 false:线上地址】        buildConfigField "boolean", "IS_TEST", "false"        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }}
debug 代表的是没有签名的版本  release代表的是 签名的版本  所在在 release 节点下 设置 混淆开关   //代码混淆  minifyEnadbled true  (true为混淆 false为不混淆)  关联混淆文件  proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
   2 配置混淆文件  我们设置了混淆开关 true 代表 项目被混淆 但是由于有一些内容是不能被混淆的 所以 我们需要在配置文件中声明 不能被混淆的内容

     a  通用配置:

        

#指定代码的压缩级别-optimizationpasses 5#混淆时所采用的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#优化  不优化输入的类文件-dontoptimize#包明不混合大小写-dontusemixedcaseclassnames#混淆时是否记录日志-verbose#不去忽略非公共的库类-dontskipnonpubliclibraryclasses-dontskipnonpubliclibraryclassmembers#保护注解-keepattributes *Annotation*-keepattributes *JavascriptInterface*#避免混淆泛型 如果混淆报错建议关掉-keepattributes Exceptions,InnerClasses,Signature-keepattributes SourceFile,LineNumberTable#忽略警告-ignorewarning

     b  关于安卓的基本过滤

#------------------  Android基本类过滤  -----------------keep public class * extends android.app.Fragment-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-keep public class * extends android.support.v4.app.Fragment-keep public class * extends android.support.v4.app.FragmentActivity-keep public class android.webkit.**-keep public class javax.**-keep public class * extends android.view.View {    public <init>(android.content.Context);    public <init>(android.content.Context, android.util.AttributeSet);    public <init>(android.content.Context, android.util.AttributeSet, int);    public void set*(...);}#保持 native 方法不被混淆-keepclasseswithmembernames class * {    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);}##保持 Serializable 不被混淆并且enum 类也不被混淆#-keepclassmembers class * implements java.io.Serializable {#    static final long serialVersionUID;#    private static final java.io.ObjectStreamField[] serialPersistentFields;#    !static !transient <fields>;#    private void writeObject(java.io.ObjectOutputStream);#    private void readObject(java.io.ObjectInputStream);#    java.lang.Object writeReplace();#    java.lang.Object readResolve();#}#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可-keepclassmembers enum * {    public static **[] values();    public static ** valueOf(java.lang.String);}#保持 Parcelable 不被混淆-keep class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator *;}#保持 Serializable 不被混淆-keepnames class * implements java.io.Serializable #不混淆资源类-keepclassmembers class **.R$* {    public static <fields>;}-keepclassmembers class * {    public <init>(org.json.JSONObject);}

     c 共性的排除项目

#------------------  下方是共性的排除项目  ----------------# 方法名中含有“JNI”字符的,认定是Java Native Interface方法,自动排除# 方法名中含有“JRI”字符的,认定是Java Reflection Interface方法,自动排除-keepclasseswithmembers class * {    ... *JNI*(...);}-keepclasseswithmembernames class * {   ... *JRI*(...);}-keep class **JNI* {*;}

     d 避免混淆的第三方jar包

#------------------  第三方包 ----------------#-keep class android.support.v4.** { *; }#-keep class android.support.v7.** { *; }#-keep class android.support.v13.** { *; }#-keep class org.apache.commons.net.** { *; }#-keep class android.support.design.** { *; }#-keep class com.google.gson.** { *; }#-keep class com.android.volley.** { *; }#-keep class com.viewpagerindicator.** { *; }#-keep class uk.co.senab.photoview.** { *; }#-keep class com.github.mikephil.charting.** { *; }#-keep class android.support.annotation.** { *; }#-keep class com.readystatesoftware.systembartint.** { *; }#-keep class com.google.zxing.** { *; }
 

     e  忽略警告

#忽略警告-keep class android.support.**{*;}-dontwarn android.support.**-dontwarn android.webkit.WebView

    f 第三方的sdk  本文中收录的 第三方的sdk 混淆代码  如果 没有被收录的请自行百度

# 百度地图过滤-keep class com.baidu.** {*;}-keep class vi.com.** {*;}-dontwarn com.baidu.**# butterknife7.0-keep class butterknife.** { *; }-dontwarn butterknife.internal.**-keep class **$$ViewBinder { *; }-keepnames class * { @butterknife.Bind *;}-keepclasseswithmembernames class * {    @butterknife.* <fields>;}-keepclasseswithmembernames class * {    @butterknife.* <methods>;}# Glide-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {    **[] $VALUES;    public *;}# retrofit1.9.0-dontwarn rx.**-dontwarn com.google.appengine.api.urlfetch.**-keep class retrofit.** { *; }-keepclasseswithmembers class * {    @retrofit.http.* <methods>;}-keepattributes Signature-keepattributes *Annotation*# retrofit2.0-dontwarn retrofit2.**-keep class retrofit2.** { *; }-keepattributes Signature-keepattributes Exceptions# okhttp-keep class com.squareup.okhttp.** { *; }-keep interface com.squareup.okhttp.** { *; }# Okio-keep class sun.misc.Unsafe { *; }-dontwarn java.nio.file.**-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement-dontwarn okio.**# universal-image-loader-dontwarn com.nostra13.universalimageloader.**-keep class com.nostra13.universalimageloader.** { *; }# 阿里百川-keepattributes Signature-keep class sun.misc.Unsafe { *; }-keep class com.taobao.** {*;}-keep class com.alibaba.** {*;}-keep class com.alipay.** {*;}-dontwarn com.taobao.**-dontwarn com.alibaba.**-dontwarn com.alipay.**-keep class com.ut.** {*;}-dontwarn com.ut.**-keep class com.ta.** {*;}-dontwarn com.ta.**-keep class anet.**{*;}-keep class org.android.spdy.**{*;}-keep class org.android.agoo.**{*;}-dontwarn anet.**-dontwarn org.android.spdy.**-dontwarn org.android.agoo.**# ShareSDK-keep class cn.sharesdk.**{*;}-keep class com.sina.**{*;}-keep class **.R$* {*;}-keep class **.R{*;}-dontwarn cn.sharesdk.**-dontwarn **.R$*# 微信支付分享-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}# 支付宝-keep class com.alipay.android.app.IALiPay{*;}-keep class com.alipay.android.app.IALixPay{*;}-keep class com.alipay.android.app.IRemoteServiceCallback{*;}# 百度云推送#-libraryjars libs/pushservice-5.2.0.12.jar-dontwarn com.baidu.**-keep class com.baidu.**{*; }

     g 针对项目的 bean文件  R文件  和 webView  需要添加的代码

#------------------  得威电商 -----------------keep class com.e_dewin.dewinapp.bean.** { *; }-keep public class com.e_dewin.dewinapp.R$*{    public static final int *;}#WebView调用JS代码的类都需要加这个-keep class com.pandaol.ui.login.LoginActivity$CommonScriptInterface {   *;}
三 配置文件下载地址 点击打开链接

0 0
原创粉丝点击